マルチパートメールを送信する

広告

本文及びヘッダーを作成したら実際にメールを送信します。メールの送信自体はMailクラスを使います。Mailクラスでメールを送信する手順は次の通りでした。

$params = array(
  "host" => "xxx.xxx.xx",
  "port" => 587,
  "auth" => true,
  "username" => "xxx@xxx.xxx.xx",
  "password" => "xxxxxxxxx"
);

$mailObject = Mail::factory("smtp", $params);

$recipients = "xxx@xxx.xxx.xx";
$mailObject -> send($recipients, $headers, $body);

最終的に「send」メソッドの引数として指定するメールのヘッダーと本文に関してMail_Mimeクラスを使って取得したヘッダーと本文を設定します。結果的には次のような形になります。

$params = array(
  "host" => "xxx.xxx.xx",
  "port" => 587,
  "auth" => true,
  "username" => "xxx@xxx.xxx.xx",
  "password" => "xxxxxxxxx"
);

$mailObject = Mail::factory("smtp", $params);

$recipients = "xxx@xxx.xxx.xx";

$body = <<<EOS
マルチパートメールのテストです。
ヒアドキュメントを使って複数行の文字列を作成しています。
日本語の場合は文字コードの変換が必要です。
EOS;

$body = mb_convert_encoding($body, "ISO-2022-JP", "auto");

$mimeObject = new Mail_Mime("¥n");
$mimeObject -> setTxtBody($body);

$bodyParam = array(
  "head_charset" => "ISO-2022-JP",
  "text_charset" => "ISO-2022-JP"
);
$body = $mimeObject -> get($bodyParam);

$addHeaders = array(
  "To" => "xxx@xxx.xxxx",
  "From" => "xxx@xxxx.xxxx",
  "Subject" => mb_encode_mimeheader("テストメール")
);

$headers = $mimeObject -> headers($addHeaders);

$mailObject -> send($recipients, $headers, $body);

マルチパートのメールを送信するまでの基本的な流れは以上となります。

サンプルプログラム

では簡単なサンプルで実際に試してみます。

sample9-1.php

<?php
require_once("Mail.php");
require_once("Mail/mime.php");

$params = array(
  "host" => "xxx.xxx.xx",
  "port" => 587,
  "auth" => true,
  "username" => "xxxx@xxx.xxx.xx",
  "password" => "xxxxx"
);

$mailObject = Mail::factory("smtp", $params);

$recipients = "xxxx@xxx.xxx.xx";

$body = <<<EOS
マルチパートメールのテストです。
ヒアドキュメントを使って複数行の文字列を作成しています。
日本語の場合は文字コードの変換が必要です。
EOS;

$body = mb_convert_encoding($body, "ISO-2022-JP", "auto");

$mimeObject = new Mail_Mime("¥n");
$mimeObject -> setTxtBody($body);

$bodyParam = array(
  "head_charset" => "ISO-2022-JP",
  "text_charset" => "ISO-2022-JP"
);

$body = $mimeObject -> get($bodyParam);

$addHeaders = array(
  "To" => "xxxx@xxx.xxx.xx",
  "From" => "xxxx@xxx.xxx.xx",
  "Subject" => mb_encode_mimeheader("テストメール")
);

$headers = $mimeObject -> headers($addHeaders);

$mailObject -> send($recipients, $headers, $body);

?>

※SMTPサーバやメール送信先などは書き換えて使用して下さい。ポート番号も「Outbound Port25 Blocking」などの関係で25番ポートではなく587番ポートなどが使われていますがこちらも環境に合わせて変更して下さい。

メール送信用PHPを呼び出すためのHTMLファイルを用意しました。

mail9-1.html

<html>
<head><title>PHP TEST</title></head>
<body>

<p>メール送信テスト</p>

<p>
<a href="./sample9-1.php">メール送信</a>
</p>

</body>
</html>

ではメール送信用HTMLファイルをWWWサーバに設置しブラウザで見てみると下記のように表示されます。

マルチパートメールの送信

「メール送信」と書かれたリンクをクリックするとメールが送信されます。実際に届いたメールは次のようになります。

マルチパートメールの送信

( Written by Tatsuo Ikura )