PEAR::Mail でSubject、本文が日本語のメールを送信する - PHP

PEAR::Mailを用いて本文やSubjectが日本語のメールを送信します。

日本語のSubject、本文に対応したメール送信プログラム

こちらの記事で作成したメール送信プログラムの日本語対応をします。

コード

<?php
//PEARディレクトリにパスを通してある場合
require_once("Mail.php");
require_once("Mail/mime.php");

//PEARディレクトリにパスを通していない場合
//require_once("C:/php/PEAR/Mail.php");
//require_once("C:/php/PEAR/Mail/mime.php");

$params = array(
  "host" => "mail.ixx.jp",
  "port" => 25,
  "auth" => false
);

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

$recipients = "internal@intra.ipentec.com";
$header = array(
  "To" => "internal@intra.ipentec.com",
  "From" => "websystem@robot.ipentec.com",
  "Subject" => mb_encode_mimeheader("自動メール送信システム")
);

$body = "このメールはシステムにより送信される自動メールです。\r\nこのメールに返信しないでください。";
$body_cv = mb_convert_encoding($body, "ISO-2022-JP", "auto");

$mailObject -> send($recipients, $header, $body_cv);
?>

解説

基本はこちらの記事で掲載してあるプログラムをそのまま用います。

$header = array(
  "To" => "postman@ipentec.com",
  "From" => $fromstr,
  "Subject" => mb_encode_mimeheader("自動メール送信システム")
);
部分の
"Subject" => mb_encode_mimeheader("自動メール送信システム")
にてSubjectの文字をMIMEエンコードしています。この処理を入れることで日本語のSubjectに対応できます。

$body = "このメールはシステムにより送信される自動メールです。\r\nこのメールに返信しないでください。"; $body_cv = mb_convert_encoding($body, "ISO-2022-JP", "auto"); にて本文をISO-2022-JPでエンコーディングする処理を追加しています。この処理により本文が日本語の場合に対応できます。

メールフォームを日本語対応にする

こちらの記事で作成したシンプルなメールフォームアプリケーションで件名や本文に日本語が入力された場合に対応します。

コード(mailsend.php)

<html>
<head>
</head>
<body>
  <?php
    require_once("C:/php/PEAR/Mail.php");
    require_once("C:/php/PEAR/Mail/mime.php");

    $button = $_POST['button_SendMail'];
    if ($button != ""){
      $sender_name = $_POST['H_Name']; 
      $mail_address = $_POST['H_Address']; 
      $mail_subject = $_POST['H_Subject']; 
      $mail_body = $_POST['H_Body']; 

      $params = array(
        "host" => "post-central.ipentec.com",
        "port" => 25,
        "auth" => false
      );
      $mailObject = Mail::factory("smtp", $params);

      $recipients = "postman@ipentec.com";
      $fromstr = sprintf("%s <%s>", $sender_name, $mail_address);
      $header = array(
        "To" => "postman@ipentec.com",
        "From" => $fromstr,
        "Subject" => mb_encode_mimeheader($mail_subject)
      );

      $mail_body_cv = mb_convert_encoding($mail_body, "ISO-2022-JP", "auto");
      $mailObject -> send($recipients, $header, $mail_body_cv);
      echo $fromstr;
      echo '<div>メールを送信しました</div>';
    }
  ?>
  <a href="mailform.php">Back</a>
</body>
</html>

解説

基本はこちらの記事で掲載してあるプログラムをそのまま用います。mailsend.phpのみを修正します。修正部分は以下の通りです。

$header = array(
  "To" => "postman@ipentec.com",
  "From" => $fromstr,
  "Subject" => mb_encode_mimeheader($mail_subject)
);
部分の
"Subject" => mb_encode_mimeheader($mail_subject)
にてSubjectの文字をMIMEエンコードしています。この処理を入れることで日本語のSubjectに対応できます。

$mail_body_cv = mb_convert_encoding($mail_body, "ISO-2022-JP", "auto");
$mailObject -> send($recipients, $header, $mail_body_cv);
にて本文をISO-2022-JPでエンコーディングする処理を追加しています。この処理により本文が日本語の場合に対応できます。

著者
iPentecのプログラマー、最近はAIの積極的な活用にも取り組み中。
とっても恥ずかしがり。
最終更新日: 2024-01-06
作成日: 2011-06-02
iPentec all rights reserverd.