GitHub対象ファイル(以下のmail~で始まる4つのファイル)
えっと、まずこの話は、実は2010年頃に社内案件(というのとは、また違うか)でこのプログラムを書いていた(ただ、業務では結局使っていない)んですけど、その後すっかり忘れまして(苦笑)
ただ今年ふと、自分の外付けHDDに入っているプログラム(許可は勿論取りましたが)を見ていたら、このプログラムがありまして、もうちょっとで出来上がるし書いてみるかという。
そもそも、「何でPHPにmail関数有るのに、こんな事をするの?」という点についてですけど、以下の通り、関数の戻り値がTRUE or FALSEしか無いんですね。
あと、mb_send_mailやimap_mail関数でも一緒みたいですし。
と思ったら、「PHPMailer」というライブラリがあり、
そこにはErrorInfoという関数があるみたいですけどね(苦笑)
どういうエラー情報取れるかってのがありますけど。
ちなみに、このライブラリだと、以下の様なメッセージ(これは成功時ですけど)です。
CONNECTED: 220 smtp.gmail.com ESMTP un2sm9860205pac.28 - gsmtp
EHLO/HELO: 250-smtp.gmail.com at your service, [{IPアドレス}]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN XOAUTH
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
AUTH LOGIN: 334 {ユーザー名を暗号化とかハッシュ化とかエンコードとかした値?}
USERNAME: 334 {パスワードを暗号化とかハッシュ化とかエンコードとかした値?}
PASSWORD: 235 2.7.0 Accepted
MAIL FROM: 250 2.1.0 OK un2sm9860205pac.28 - gsmtp
RCPT TO: 250 2.1.5 OK un2sm9860205pac.28 - gsmtp
DATA: 354 Go ahead un2sm9860205pac.28 - gsmtp
CONTENTS: 250 2.0.0 OK 1441867397 un2sm9860205pac.28 - gsmtp
QUIT: 221 2.0.0 closing connection un2sm9860205pac.28 - gsmtp
あと、このライブラリ、フレームワークの中に入ってますけど、他のファイルに依存していない作りにしてますので、単体で使えます。
といってもまぁ、この辺
http://www.atmarkit.co.jp/fnetwork/rensai/netpro03/mail-header.html のヘッダーとか大部分は現状では対応してないですし、
あと、書いた後に気付いたけど、ezwebが送信元で認証(宛先が携帯は分かるんですけど)ってとかもありますし、
あと、コード的に、以下の書き方が大変に気に食わないというのもありますし。
final_magic/mail_send.php at master · kitoku-magic/final_magic · GitHub
どうも、以下と同じ話だと思い、色々やってみたんですけど、どうもダメでしてね(そういえば、以下のコードをそのまま実行してなかった)。
PHPでの対話的なソケット通信についてのメモ | ブログ :: Web notes.log
あと、メールといえば、メールヘッダインジェクションがありますけど、
以下を見て、「ヘッダー部分に改行があったらエラー、ヌルバイトは空白に置換」としました。
ただ、呼び出し情報全て改行だと、本文の改行も改行も無くなってしまうので、
本文は何もしていないです。
あと、メアドのチェックも一緒で、この辺はアプリによって変わるのではと思いましたので、呼び出し側で考えてくれの方が良いんじゃないかと。
使い方のイメージとしては、「会員登録後のメール送信」や「お問い合わせでのメール送信」辺りを想定しています。
僕個人は今、本番サーバーのアクセスパスとアクセス数をまとめた情報を自分のメアド宛に送ってますけど、これは何となく思っただけなので、あまり意味はないかと。
あと、大量のメール配信だと、以下の様なサービスじゃないと、配信するサーバーの問題もあるだろうし、現状では難しいかもしれないですね。
あと、これはまだ本番では対応していないですけど、「メール送信の結果(要するに上記にあったログ情報)をcronに渡して、そこからPostfixとmailコマンド使って、その情報をまた送る」というのも予定しています。
「失敗(成功の時でも来ますけど、これは用途によると思われ)した時の情報が自動でメールで来たら良いでしょ」と思いまして。夜中にその対応ってのは、「お金を出していただければ良い」と思いますし。ただ、Postfixがかなり時間かかりそうですけどね。
そんな所です。
あと、他にもソース見て気付いた点がありましたら、突っ込んでいただければと思います。