勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHPでメール送信時に返信先(Reply-To)を指定する方法

  PHP

PHPにてメールを送信し、そのメールに対して返信しようとすると通常は送信元のメールアドレスに対して返信しようとする筈。この返信先をPHP側で指定したい。調べたところ「Reply-To」というメールヘッダーを指定すれば良いみたい。バニラPHPとPHPMailerでの対応方法をメモ。

 

背景・やりたいこと

フォームからお問い合わせなどを行った場合、ユーザ・クライアント共に自動送信用メールアドレスからメールを受信するというケースが多い。

ユーザに対しては大抵「このアドレスは自動送信用のため返信できません」的な案内をする。

ただ、クライアント側は届いたメールに対して返信したい筈なんだけど、そのまま返信しようとすると自動送信用メールアドレスが宛先になる筈。この返信先をユーザ宛てに指定したい。

 

対応方法

バニラPHPの場合

送受信用のメールアドレス及び名前部分は適宜変更すること。

mb_language('ja');
mb_internal_encoding('UTF-8');

$to = 'to@test.com';
$to_name = '受信者名';

$from = 'from@test.com';
$from_name = '送信者名';

$header_option = [
    'MIME-Version' => '1.0',
    'Content-Transfer-Encoding' => '7bit',
    'Content-Type' => 'text/plain; charset=UTF-8',
    'Return-Path' => $from,
    'From' => $from_name . ' <' . $from . '>',
    'Sender' => $from_name . ' <' . $from . '>',
    'Reply-To' => $to,
    'Organization' => 'OrganizationName',
    'X-Sender' => $from,
    'X-Mailer' => 'Postfix/2.10.1',
    'X-Priority' => '3',
];
array_walk( $header_option, function( $_val, $_key ) use ( &$header ) {
    $header .= sprintf( "%s: %s \r\n", trim( $_key ), trim( $_val ) );
});

if( mb_send_mail($to, 'subject', 'body', $header) ){
    //成功時処理
}else{
    //失敗時処理
}

PHPMailerの場合

送受信用のメールアドレス及び名前部分は適宜変更すること。

mb_language('ja');
mb_internal_encoding('UTF-8');

$subject = 'subject';
$body = 'body';

$to = 'to@test.com';
$to_name = '受信者名';

$from = 'from@test.com';
$from_name = '送信者名';

$mail = new PHPMailer\PHPMailer\PHPMailer();

$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';
$mail->SMTPSecure = 'tls';
$mail->setFrom($from, $from_name);
$mail->AddReplyTo($to, $to_name);

$to = explode(',', $to);
for( $i = 0; $i < count($to); $i++){
    $mail->addAddress($to[$i]);
}

$mail->Sender = $from;
$mail->Subject = $subject;
$mail->Body = $message;

if( $mail->Send() ){
    //成功時処理
}else{
    //失敗時処理
}

 

参考サイト

https://qiita.com/ka215/items/e5d21fe91a30fa968a2a

https://qiita.com/e__ri/items/857b12e73080019e00b5

 - PHP

  関連記事

PHPMailerでエンベロープFrom(Return-Path)を指定する方法

同じメールアドレスから送信したメールがmb_send_mail関数だと受信できる ...

PHPでファイルを添付してメールを送信する方法(PHPMailer)

PHPでファイルを添付の上、メールを送信したかった。方法を探したところphpma ...

PHPMailerを使ってメールをSMTP送信する方法(Composer無し)

PHPでメールをSMTP送信したかった。また、レンタルサーバだったのでCompo ...

Mailtrap & PHPMailerでメールサーバ無しの環境でもメール送信テストを行う方法

開発環境等メールサーバが無い環境でメール送信テストを行う際にMailtrapとい ...

PHPでHTMLメールを送信する方法(PHPMailerあり無しの2パターン)

PHPでHTMLメールを送信したい。また、メール関連の機能を実装する際は環境によ ...