ようこそゲストさん

Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte

SMTP送信する

PHPメール送信には主に3通り

PHPでメール送信する場合には、いくつかの方法があります。
  1. PHPのmail関数
  2. PHP設置サーバーのsendmailを直接操作
  3. 他のSMTPサーバーから送信
どちらにせよ、最終的にすべてsendemail*1がかかわります。SMTPサーバーの正体は、他のサーバーで動くsendemailだったりするわけですから。

で、オールマイティなのは、SMTP送信です。
RFCで規格が定められており、例えメールサーバーがsendmailでなくても、規格通りに通信ができます。
離れた別のSMTPサーバーを使えるので、PHPのmail関数やPHP設置サーバーにsendmailがなくても、メールを送信することができます。
SMTPサーバーは、例えば、自分が使用しているプロバイダの送信サーバーも使えるし、他に借りているレンタルサーバー、もちろん自前設置の送信サーバも使えます。
ウィンドウズ(windows)環境で、メール送信サーバーを設置するのが面倒な場合などは、お手軽にSMTP送信できるQdmailは役に立つはずです。

*1 : または、qmailやPostfixなどの送信サーバ。しかしそれはsendmailほぼ互換なので、ここでは同一視する。

QdmailをSMTP通信で利用するには

簡単高機能SMTPメール送信ライブラリ-Qdsmtpを使います。
使い方はいたって簡単です。
下記にサンプルコードも記載しますが、QdsmtpのQdmailと組み合わせて使うには、もご参照ください。
追記:さらにディープにSMTP連携について知りたい場合は、SMTP玄人的連携法をご参照下さい。

サンプルコード

関数型のサンプルは、qd_send_mailでSMTP送信をご参照下さい。
SMTP認証の場合
require_once('qdmail.php');

$mail = & new Qdmail();

$mail -> smtp(true);

$param = array(
    'host'=>'smtp.example.com',//メールサーバー
    'port'=> 587 , //これはSMTPAuthの例。認証が必要ないなら 25 でOK。
    'from'=>'from@example.com', // Return-path: になります。
    'protocol'=>'SMTP_AUTH',// 認証が必要ないなら、'SMTP'
    'user'=>'user_id@example.com', //SMTPサーバーのユーザーID
    'pass' => 'sasuga99', //SMTPサーバーの認証パスワード
);
$mail -> smtpServer($param);

$message="メールの中身をここに書きます。";

$mail ->to('toaddress@example.com','スポック宛');
$mail ->subject('メールのテスト');
$mail ->from('from@example.com');
$mail ->text($message);
$return_flag = $mail ->send();
ポイント、 Qdsmtpをインクルードする必要はありません。include_pathに含まれた場所にqdsmtp.phpが置いてあれば、Qdmailが勝手にインクルードします。
もし、自動インクルードがうまくいかないようだったら、ユーザー側でインクルードしてみてください。

インクルードされていれば、QdSmtpを new する必要はありません。Qdmailが自動で、QdSmtpのインスタンスを作成します。

SMTP AUTH以外のノーマルSMTP,POP BEFORE SMTPをお使いの場合は、下記をご参照ください。
QdSMTP初期設定
SMTPパラメータのfromは、Return-path:ヘッダとなり、$mail->form(...)の方は、From:ヘッダとなります。ご留意ください。

記事リスト

# ぽん他 2009年03月06日(金) 午後5時41分

簡単なんでびっくりしました!!

# wanko 2009年04月01日(水) 午前11時51分

http://hal456.net/qdmail/smtp
のサンプルでHTMLメールを送信することができました。送信先は、携帯のみです。
次に送信に失敗した場合のUndeliverMailを指定アドレスに受け取りたいのですが、Qdsmtpの使用方法をみてoptionを指定してみたのですがQdmailのエラーになります。どのようにoptionを指定したらよいでしょうか?

# wanko 2009年04月01日(水) 午後0時01分

先に投稿しましたwankoです。
optionを設定できるのが最大の希望ですが、もしそれが無理なら送信時エラーが発生した場合(送信しようとしたメールアドレスが間違っていた、存在しないメールアドレスだった場合がよい例です)にエラーログを出力する方法を考えています。この場合はcronで定期にエラーログ(正常なログも混在か?)を管理者へ送信するしかないかと思います。
送信エラーの検出についてよい方法がありましたらぜひともご案内ください。
よろしくお願いいたします。

# php初心者 2010年02月12日(金) 午前11時03分

利用させていただいてます。
上記ソースの必要部分を変更して送信しても
エラー表示はされないのですが、
送信先にメールが届きません。
なぜでしょうか?

# zero 2013年04月21日(日) 午後6時50分

簡単で、とても便利です。

>php初心者さん
上記サンプルソースには全角空白が入っているため、エラーとなります。
ソース内の全角空白を半角空白にすると動くかと思います。


#  非公開コメント   
  • TB-URL  http://hal456.net/qdmail/025/tb/
  • SMTPの玄人的操作法 Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte spok
    必ずバージョン0.9.0a以降でご使用ください。QdSmtpをQdmailから操作する。QdSMTPを利用して、Qdmailからメールを送る基本的な方法は、QdSmtpでのSMTP送信をご覧ください。ここでは、メールを送るだけではなくて、QdSmtpの機能...
  • トラブル時、とにかくやってみること Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte spok
    1番目改行コードをCRLFからLFのみに変更してみる$mail -> lineFeed("\n");2番目一般のプロバイダの送信サーバーを利用してのSMTP送信を試してみる。3番目デバッグモードを利用し、 で、メールヘッダー及び本文を表示してこのサイ...