開封確認(受信確認)&配送確認

2008/09/03 未分類 spok

開封確認(受信確認)&配送確認

Qdmailでは、追加ヘッダーに設定することにより、開封確認(受信確認)&配送確認をすることができます。
しかし、作者としては配送確認はともかく、開封確認(受信確認)機能を利用していただくことには消極的です。

開封確認機能に消極的な理由

「相手がメールを読んだかどうか。」
送信した人にとっては、結構気になるものですが、受け取った側の人間にとっては煩わしいだけのもので、通常、よくないメールマナーとして紹介されていることが多いです。私自身も受け取りたくないです。
また、スパムメールが好んで使う場合もあり、これも非推奨の理由です。
しかしクローズドな関係での情報のやり取りなどで必要な場面というのも考えられなくはないので、ここに紹介する次第です。
Qdmailには開封確認についての便利な機能はあえて搭載していません。必要な方は、このページを参考に、ご自分でヘッダーを設定してください。

開封確認(受信確認)と配送確認の違い

開封確認(受信確認)は、受信者がメールを開いたかどうか(読んだかどうかではない)を確認するためのものです。
配送確認は、最後のサーバーまで届いたかどうかという点です。受信者が開封したかどうは関係ありません。配送確認は、開封確認の一歩手前の段階です。

開封確認(受信確認)

ヘッダー Disposition-Notification-To が開封確認のヘッダーです。X-Confirm-Reading-Toというヘッダーも同様の働きをしますが、過去のものであり、Disposition-Notification-Toだけで十分でしょう。

開封確認(受信確認)の設定の仕方

qd_send_mail方式の場合(テキストメール)
$add_header = array(
    'From'=>'return@example.com',
    'Disposition-Notification-To'=>'return@example.com',
);

qd_send_mail( 'text' , 'to@example.com' , '件名' , $add_header );
※FromとDisposition-Notification-Toに設定するアドレスは、別々に設定することができますが、一致していないと配送確認を返送しないメーラーもあるようです。
OOP or easyメソッドの場合
$mail にはQdmailのインスタンス(オブジェクト)が入っているものとします。
$mail -> addHeader('Disposition-Notification-To','return@example.com');

配送確認

配送確認の方法は2つあります。
名称配置備考
Return-Receipt-Toヘッダー古い仕様&RFC非準拠
NOTIFY=SUCCESS,FAILUREエンベロープSMTP通信でないとダメ(正しくはESMTP通信)
Return-Receipt-Toは、RFCで明確にされているものではなく、sendmailというインターネットでは代表的なメールサーバの独自拡張です。しかし、sendmailは途中からこのヘッダーをサポートしなくなり、現在のバージョンでは無視されます。もうReturn-Receipt-Toは過去のものと思って良いでしょう。
NOTIFY=SUCCESS,FAILUREは、逆に古いSMTPサーバーではサポートしていないため、送信、受信の両方が対応している必要があります。
現在では、NOTIFY=SUCCESS,FAILUREを設定するのが現実的です。
Qdsmtpでは、簡便的な方法で対応しています。0.1.7.a以降。

SMTP通信の場合
QdmailからQdsmtpを使用する場合は、Qdsmtpで配送確認のページの、SMTP初期設定時のパラメータで指定する方法がよりでしょう。
ただし、この方法は、どの宛先にも配送確認を付けてしまうので、留意が必要です。
また、返送先のアドレスは、ヘッダーのFromではなく、エンベロープのFrom(Return-Path)なので注意が必要です。

mail関数の場合
Qdmailでは、mail関数を利用している場合には、mtaOption()メソッドを利用します。
 -Nオプションで、Notifyの設定を行い、-f でreturn-pathの設定を行います。

配送確認の設定の仕方

Return-Receipt-Toは過去のものなので、ヘッダーだけご紹介しておきます。
Return-Receipt-To
設定は、受信確認を参考にしてください。

Qdsmtpを利用してSMTP送信している場合

NOTIFY=SUCCESS,FAILUREについては、いつかqdsmtpの配送確認のページをご参照下さい。

mail関数を利用している場合

mail関数の第5引数は、MTAに渡すオプションです。お使いのサーバーがsendmailまたはsendmailラッパーであれば、以下の設定をしてみてください。

qd_send_mail($option .....)の場合
$option = array(
    'type' => 'text',
    'option'=>array(
	'mtaOption'=>'-N success,failure -f return_address@example.com'
    ),
);
return_address@example.comには、貴方が返事をもらうためのアドレスを指定してください。
 -f はreturn-pathを設定するためのオプションです。

OOPまたはeasy...メソッドの場合
$mail -> mtaOption( '-N success,failure -f retun_address@example.com' );

その他

この確認の確実性

多くの人は、開封確認(受信確認)について無効に設定しているかと思います。開封確認を付けたからといって、必ず相手が開封したかどうかがわかるわけではありません。
また、配送確認も上記のとおり、確実なものではありません。
配送確認を確実にしたい場合は、SMTPにて相手のサーバーに直接送り届けることでしょう。

参考にさせていただいたサイト

開封確認-中の技術日誌ブログ
開封確認付きメールをどう思いますか。-人力検索はてな
メーラ機能比較報告書-西村宏之のホームページです
becky-ml:01166 開封確認
sendmail システム管理 (151K) -日本ネットワークインフォメーションセンター
SMTP拡張サービス
RFC1891日本語参考訳