message_id

2008/09/11 未分類 spok
Qdmailでは、1.1.1b以降から、message_idを自動的につけてくれます。
それまでは、message_idをつけずに、mail関数やSMTPサーバーに渡していました。それでも、サーバーが自動で付けてくれるので、古いバージョンでも心配はありません。


Qdmailでは、送信ごとにmessage-id を生成し、どのmessage-idも一意になるようにしています。

messge-idを自動では付与しない方法

$mail -> messageId( false );
デフォルトでは、 true です。

message-Id を自分で指定する場合

aaddHeader()メソッドを使って、ご自分で指定してください。
$mail -> addHeader( 'Message-ID','message-id-001001001');
message id は、全世界で一意である必要があります(守っていないメーラーも多いそうですが。)。

message-idの右側だけ自分で指定する場合

Message-IDヘッダは、以下の形式にすべきとRFCにて定められています。
一連番号や文字列@IPアドレス
一連番号や文字列@ドメイン名
一連番号や文字列@コンピュータ名
Qdmailでは、この@の右側について、@hal456.netとつけるのがデフォルトとなっています。
一方で、多くのメーラーでは、Fromヘッダーの差出人のメールアドレスを付けることも多いようです。
もし、message-id の@の右側部分だけを任意のものにしたい場合は以下のメソッドをお使い下さい。

(1.1.3b以降に有効です。)
$mail -> messageIdRight( 'example.com' );

推奨事項

Massage-ID ヘッダは、世界で唯一の値であることが求められています。qdmailでは、なるべくその要件を満たすようにしてありますが、より確実にするために、以下の設定を推奨しておきます。
  • ソースコードの中で、
var $salt = 'qdmail';
とある行を探し出し、'qdmail'を探しだし、任意の別の言葉に置き換える。
意味のある言葉でなく、ランダムな文字列でも大丈夫です。例えばsalkdfhaoifsakdaw9r5dfsとか。
( $salt で検索するのがよいでしょう。)

Qdmailは、Message-Idの作成に、SHA1()関数を使っており、この$saltを変えていただくと、より一意なmessage-idを作成する可能性が高くなります(あくまでも可能性)。

必須ヘッダ(Date,Massage-Id)

2008/09/10 未分類 spok
このメソッドは1.1.1bのみで廃止されました。1.1.2以降での使用はできません。


必須ヘッダーのDateヘッダー、Message-Idヘッダーを自動でつけるかどうか。
$mail -> autoHeader( true );
ただし、ソースコードのvar $time_zone が設定されていないとDateはQdmailでは自動ではつかない。

しかし、多くのSMTPサーバーはDateヘッダがなければ自動的につけてくれる(はず)。

リセット

2008/09/10 未分類 spok

OOPメソッドでは、Qdmailは覚えている

(1.1.1b以降)..1.1.1bにはバグがあるので、1.1.2以降推奨

Qdmailインスタンスは、メールを送信しても、データを覚えています。
そのまま次のメールを送ろうとすると、思いがけず、前のデータを送信したりしますので、そうならないようリセットをして使いましょう。

easyメソッド(1.1.1b以降)、qd_send_mailは、送信前にコンテンツ部分はリセットされます。ここでは、OOP型の話です。

ヘッダーだけリセット

$mail->resetHeader()

Body だけリセット

$mail -> resetBody();

ヘッダーとBody の両方をリセット

$mail -> resetHeaderBody();

すべてのパラメータリセット

ヘッダーのみならず、charset指定などのオプションパラメータをすべて初期化します。
$mail -> reset();

電子署名付きメールの送信方法(全体像)

2008/09/07 未分類 spok

電子署名を取得する

無料の方法

thawteの場合
無料でデジタル証明書を取得する(1)-@IT を参考に、thawteから取得する。
これでIEからエクスポートした、pfxファイルが、「thawteが電子署名した、貴方の公開鍵とメールアドレス等の情報」です。つまりこれが貴方の電子証明書。貴方は、第三者認証機関である、thawteに貴方の公開鍵とメールアドレス等の情報を保証してもらっているので、貴方の電子証明書付きのメールをもらった人は、貴方のメールアドレスから発信されたことを安心して信頼できるのです。
ベリサインの場合
試用版が無料で提供されている。
ベリサイン マネージドPKI
Class1 ライト トライアル版(個人用)

有料の方法

有名どころはベリサインだと思いますが、探せばたくさんあるでしょう。

Qdmailでの送信方法

  1. pfxファイルを、外部からアクセスできないディレクトリに保存する。
  2. 電子署名の使用方法を参考にソースを組み立てる。

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

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日本語参考訳