coreserverを使ってwebサービスアプリを作ることになったが、セキュリティが甘く受信先で拒否されることが頻繁に起きた。そこでsmtpサーバーだけgmailを使ってみた。
簡単にできると思ったが、添付ファイルの日本語ファイル名の文字化けに苦労した。

最終的に以下で落ち着いた

$mimeObject -> addAttachment($file // data
,'application/octet-stream' // content-type
,mb_substr(mb_strrchr($file, "/"), 1) // attached file name
,true // isfile
,'base64' // encoding
,'attachment' // disposition
,'' // charset
,'' // language
,'' // location
,'base64' // n_encoding
,'base64' // f_encoding
,'' // description
,'UTF-8' // h_charset
);

最初の$fileはファイル名
mb_substr(mb_strrchr($file, "/"), 1) は$fileがpathも含まれるためpathを取り除いている
true はファイル名であることを明示
UTF-8はgmailの仕様

参考にさせていただいたサイト
PEAR::Mail_mimeで日本語ファイル名の添付ファイルを送る方法
https://koyhogetech.hatenablog.com/entry/20120404/mailmime

mb_substr(mb_strrchr($file, "/"), 1) は
ファイル名などに日本語が含まれるパスでbasename関数が失敗するバグ
https://php1st.com/1434

ありがとうございました。

久しぶりにphpMyadminをアクセスしたら「HTTP ERROR 500」になった。
エラーログは
PHP Fatal error:  require_once(): Failed opening required '/usr/share/php/gettext/gettext.inc' (include_path='.:/usr/share/pear') in /var/www/html/phpmyadmin/libraries/select_lang.lib.php on line 477

解決策は
yum --enablerepo=epel install php-php-gettext

動いた!

バリューサーバーからpearを使ってメール送信を試みたが上手く動作しない。やっと解決したのでメモ。

まずバリューサーバーのphpの動作モードを確認。


モジュール版を確認



phpの動作モードがモジュール版の場合、Document root ディレクトリーに.htaccessを置き下記を記述した。

php_value sendmail_from "your_name@your_domain"
php_value SMTP "s7.valueserver.jp"
php_value smtp_port "587"


phpinfoで反映を確認

これで正常にメール送信ができた。

参考サイト:
http://wxiaoy.com/category10/entry76.html
https://www.gesource.jp/weblog/?p=283

サーバーを替えてしばらく過ぎてメール送信の不具合に気付いた。
$mailObject = Mail::factory("smtp", $params);
の部分でエラーが出ていたようだ。

smtpを使用するには、Net_SMTP 関連パッケージが必要らしい。何度もpearをインストールしているが、このケースは初めてだ。

# pear list
Installed packages, channel pear.php.net:
=========================================
Package Version State
Archive_Tar 1.3.11 stable
Auth_SASL 1.0.6 stable
Console_Getopt 1.3.1 stable
Log 1.12.9 stable
Mail 1.2.0 stable
Mail_Mime 1.10.0 stable
Mail_mimeDecode 1.5.5 stable
Net_SMTP 1.7.1 stable
Net_Socket 1.0.14 stable
PEAR 1.9.4 stable
Structures_Graph 1.0.4 stable
XML_Util 1.2.1 stable

やっと動いた。

フォームの応答に送信専用アカウントが必要になる場合があります。
考え方を変えれば、このアカウントに送信された場合、受信拒否をすればよいことになります。

vi /etc/postfix/main.cf

#header_checks = regexp:/etc/postfix/header_checks
#を削除、適用させる

vi /etc/postfix/header_checks

最後に記述
# HEADER_CHECKS
/^To:.*このメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。/ REJECT

設定後、postmap作成
/usr/sbin/postmap /etc/postfix/header_checks

postfix 再起動
/etc/rc.d/init.d/postfix restart