スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[PHP] 外部メール送信のために Qdsmtp を使ったのだけど Cc: 送信ができなかった件

メールフォームなどよく作っているのですが、
たいていのものは設置したサーバの送信機能を使うんですね。
レンタルサーバなんかじゃ、ほぼそうです。

ただ自社でサーバを持っている場合、そちらを使いたいということがあって、
Webサーバにメールを送る機能がついてないときがあると。
そういう場合に、外部のサーバを使うことになります。

ガリガリ書いてやるとか、PEAR使うとかいろいろ手段はあるとは思うのですが、
労力は省きたいし、それだけのためにPEARを入れるのも面倒だし、
そもそもお客様にPEAR入れてというのも言いにくい話。

そこで1ファイルをインクルードするだけで使えるこいつの出番。

Qdsmtp-Simple SMTP Mailer for PHP - Qdsmtpとは
http://hal456.net/qdsmtp/

使い方も簡単。パラメータとか与えたのち、 mail() と同じようにして使います。

require_once('qdsmtp.php');

$param = array(
'host'=>'smtp.example.com',
'port'=> 25 ,
'from'=>'from@example.com',
'protocol'=>'SMTP',
);
$smtp = & new QdSmtp($param);


こう準備をしてやってから、

$to = 'address@example.com';
$subject = 'Hello!'
$body = 'I am Spok from Valcum ..........Live log and Prosper.';

$smtp ->mail( $to , $subject , $body );


mail() と同じように使ってやる。
ヘッダが必要なら第四引数に書く。これも mail() と同じ。

で、自サーバで送信するときは mail() を使い、外部サーバを利用するときには
これを利用して、同じようにパラメータを投げる……としていたのですが、
どうも Cc: がうまく送信できない。ヘッダに書きこまれているし、メーラでも
Cc: には表示されている。でも Cc: に指定されたアドレスにはメールが届いてない。

まったく意味がわからないながらも解決したのはこんな手順。

1)ヘッダは From: Reply-To: Cc: を指定できるようにしていた
2)これらは前から順に文字列に連結してつくっていき、Cc は指定があれば末尾につく
3)いろいろ試すと、Cc が末尾になると実際の送信はされてない模様
4)Cc: を末尾から移動し、末尾には人畜無害なヘッダ情報を付与した

$addHeader = "From: ".$mail."\r\n";
$addHeader .= "Reply-To: ".$mail_from."\r\n";
//設定されていれば
if( strlen( $mailCc) > 0 ){
$addHeader .= "Cc: ".$mailCc."\r\n";
}
//CCを末尾にするとなぜか送信されないので、冗長な情報を付与する
$addHeader .= "Content-Transfer-Encoding: 7bit\r\n";
$addHeader .= "\r\n";


まったく理解してやってるわけではないのですが、
とりあえず Cc: に送信されない件についてはこれで解決。
RFC とこのライブラリのソースを見れば解かるのでしょうけど。
関連記事
スポンサーサイト

テーマ : PHP
ジャンル : コンピュータ

comment

管理者にだけメッセージを送る

検索フォーム
リンク
最新記事
最新コメント
カテゴリ
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。