PHPコーディング

SMTPソケットをオープンしてメール送信(メールDATA部)

2010年01月27日
前回に続き、今度はDATA部です。いわゆるメールのボディ部です。

ボディ部は、【DATA】コマンドから、【.】のみの行が送信されるまでとなります。


$from_name = mb_encode_mimeheader("差出人名", "EUC", "B");
$from_add = "from@domain.xxx";
$to = "sendto@yyyy.zzz";
$reply-to = "reply@domain.xxx";
$subject = mb_encode_mimeheader("smtpメール送信", "EUC", "B");
$body = "メール本文です。\n";
$body = mb_convert_encoding($body, "ISO-2022-JP", "ASCII,JIS,UTF-8,EUC-JP,SJIS");

$result = @fputs($sock, "DATA\r\n");

$data.= "From: ".$from_name."<".$from_add.">\r\n";
$data.= "To: ".$to."\r\n";
$data.= "Subject: ".$subject."\r\n";
$data.= "Reply-To:".$reply-to."\r\n";

$data.= "MIME-version: 1.0\r\n";
$data.= "Content-Type: text/plain; charset=ISO-2022-JP\r\n";
$data.= "Content-Transfer-Encoding: 7bit\r\n";
$data.= "\r\n";
$data.= $body

@fputs($sock, $data."\r\n");
$result = @fgets($sock, 128);

//最後を示す【.】を送信
@fputs($sock, "\r\n.\r\n");
$result = @fgets($sock);

上の例は、内部文字コードは【EUC】、【ISO-2022-JP】のプレーンテキストメールを送信する場合です。

$data.= "MIME-version: 1.0\r\n";
以降を変えることで、もちろんthmlメールや添付ファイル付きのメールを送信することもできます。

この辺りは、【mail】関数で添付なしプレーンテキスト形式メールを送信【mail】関数で添付ありプレーンテキスト形式メールを送信【mail】関数で添付なしhtml形式メールを送信(代替本文なし)【mail】関数で添付ありhtml形式メールを送信(代替本文なし)【mail】関数で添付なしhtml形式メールを送信(代替本文あり)【mail】関数で添付ありhtml形式メールを送信(代替本文あり)とほぼ同じです。
違うのは、行の最後を表す文字がきっちり【\r\n】になることです。


送信し終えたら、
@fputs($sock, "QUIT\r\n");
@fclose($sock);