Mail::send() – メールを送信する


require_once 'Mail.php';

mixed send ( mixed $recipients , array $headers , string $body )


メールを送信します。 send() 関数は、 factory() から返されたオブジェクトによって提供されます。


  • mixed $recipients - 配列かカンマで区切った受取アドレスの文字列です。

  • array $headers - ヘッダの連想配列。 ヘッダ名が配列のキー、ヘッダの値が配列の値となります。 メールの envelope sender を書き換えたい場合は Return-Path ヘッダを設定します。 すると、この値が From ヘッダの値の代わりに用いられます。

  • string $body - メール本文です。

Return value

boolean - TRUE か、または失敗した場合は PEAR_Error オブジェクトです。


Possible PEAR_Error values
メーラドライバ エラーコード エラーメッセージ 意味 解決
sendmail NULL "No from address given." $headers は、 少なくとも from エントリを必要とします、 From ヘッダを追加します:
['From'] = '';
sendmail NULL "From address specified with dangerous characters." $headers 配列の from エントリの中に、 RFC に準拠していない文字が含まれています。 From アドレスに与えた文字に、 下記のような文字が無いか検査してください。 半角空白・;&` (バッククォート/バックティック)
sendmail NULL "sendmail [path to sendmail] not executable" sendmail プログラムへのパスが正確ではありません。 実行可能な sendmail が見つかりませんでした。 あなたが Mail::factory() を呼び出したときの、 $param['sendmail_path'] エントリを調べてください。 もし例えば qmail といった sendmail とは別のメーラの場合は メーラのインストールを確認してください。 通常は sendmail ラッパを含んでいるはずです。
sendmail NULL "sendmail returned error code code" sendmail が返すエラーです。 使用者はそれを扱わなければなりません。 あなたのメーラプログラムのドキュメントを参照ください。
smtp PEAR_MAIL_SMTP_ERROR_CREATE "Failed to create a Net_SMTP object" クラス生成の失敗です。 Net_SMTP パッケージの再インストールか更新をします。
smtp PEAR_MAIL_SMTP_ERROR_CONNECT "Failed to connect to host:port" SMTP サーバへの接続に失敗しました あなたが Mail::factory() を呼んだ時の $param['port']$param['host'] エントリを確認します。
smtp PEAR_MAIL_SMTP_ERROR_AUTH "method authentication failure" 認証の失敗です。 あなたが Mail::factory() を呼んだときの $param['auth']$param['username']$param['password'] エントリを確認します。 その SMTP サーバ用の、正しい認証方法を使用してください。
smtp PEAR_MAIL_SMTP_ERROR_FROM "No From: address has been provided" $headers 配列には、少なくとも from のエントリが必要です。 From ヘッダを追加します:
['From'] = '';
smtp PEAR_MAIL_SMTP_ERROR_SENDER "Failed to set sender: from" sender (送信者) アドレスの設定に失敗しました。 sender アドレスが RFC に準拠しているかどうか、 またサーバと接続できているかどうかを確認してください。
smtp PEAR_MAIL_SMTP_ERROR_RECIPIENT "Failed to add recipient: recipient " 受信者アドレスの送信に失敗しました。 受信者のアドレスが RFC に準拠しているかどうか、 またサーバと接続できているかどうかを確認してください。
smtp PEAR_MAIL_SMTP_ERROR_DATA "Failed to send data" メールメッセージ本文の送信が出来ませんでした。 メッセージ本文のRFC準拠とサーバ接続を確認してください。


This function can not be called statically.



$recipients '';

$headers['From']    = '';
$headers['To']      = '';
$headers['Subject'] = 'Test message';

$body 'Test message';

$params['sendmail_path'] = '/usr/lib/sendmail';

// Mail::factory メソッドを使用してメールオブジェクトを作成します
$mail_object =& Mail::factory('sendmail'$params);

メーラインスタンスを作成する (Previous) メールアドレスの検証 (Next)
Last updated: Sun, 20 Apr 2014 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

Note by:

i'm below code which is not all working for my website....please help and guide the exact thing that i have to follow.


$username ""
$password "taconsulting2012"

$name $_REQUEST['name'] ;
$sex $_REQUEST['sex'] ;
$email $_REQUEST['email'] ;
$number $_REQUEST['number'] ;
$location $_REQUEST['location'] ;
$relocate $_REQUEST['relocate'] ;
$salary $_REQUEST['salary'] ;
$salary2 $_REQUEST['salary2'] ;
$resume $_REQUEST['resume'] ;
$comments $_REQUEST['comments'] ;

$from $email;
$to "";
$subject "Enquiry";

$body $body "Name: $name \nSex: $sex \nEmail: $email \nContactNumber: $number \nLocation: $location \nRelocate: $relocate \nCurrentSalary: $salary \nExpectedSalary: $salary2 \nResume: $resume \nComments: $comments \n";

$headers = array ('From' => $from,
'To' => $to,
'Subject' => $subject);
$smtp Mail::factory('smtp',
array (
'host' => $host,
'auth' => true,
'username' => $username,
'password' => $password));

$mail $smtp->send($to$headers$body);

if (
PEAR::isError($mail)) {

<p> <? echo $mail->getMessage();
Note by: undisclosed-recipients
If you are using smtp to send out the mail, and the To: field shows "undisclosed-recipients:", please remember to add

$headers['To'] = "Recipient <>"

to your headers.
Note by: burak a.t toruko d.o.t com
Just a correction for my previous message.

These two lines:
$From = "From: ".$from_name." <>";
$To = "To: ".$to_name." <>";

should read:
$From = $from_name." <>";
$To = $to_name." <>";
Note by: burak a.t toruko d.o.t com
You can combine PEAR::Mail with mb_string functions to send valid Japanese(ISO-2022-JP) emails via SMTP connection:
"&#40658;&#27810;&#12288;&#26126;"// Japanese name
$to_name "&#19977;&#33337;&#12288;&#25935;&#37070;"// Another Japanese name
$subject "&#26085;&#26412;&#35486;&#12513;&#12540;&#12523;&#12398;&#12486;&#12473;&#12488;"// Japanese subject
$mailmsg "&#12371;&#12428;&#12399;&#26085;&#26412;&#35486;&#12398;&#12513;&#12483;&#12475;&#12540;&#12472;&#12391;&#12377;&#12290;&#25991;&#23383;&#21270;&#12369;&#12398;&#12486;&#12473;&#12488;&#12434;&#34892;&#12356;&#12414;&#12377;&#12290;";
//Convert encodings of subject, sender, recipient and message body to ISO-20222-JP
$from_name mb_encode_mimeheader($from_name"ISO-2022-JP""Q");
$to_name mb_encode_mimeheader($to_name"ISO-2022-JP""Q");
$subject mb_encode_mimeheader($subject"ISO-2022-JP""Q");
$mailmsg mb_convert_encoding($mailmsg"ISO-2022-JP""AUTO");

$From "From: ".$from_name." <>";
$To "To: ".$to_name." <>";

$recipients "";
$headers["From"] = $From;
$headers["To"] = $To;
$headers["Subject"] = $subject;
$headers["Reply-To"] = "";
$headers["Content-Type"] = "text/plain; charset=ISO-2022-JP";
$headers["Return-path"] = "";
$smtpinfo["host"] = "";
$smtpinfo["port"] = "25";
$smtpinfo["auth"] = true;
$smtpinfo["username"] = "smtp_user";
$smtpinfo["password"] = "smtp_password";

$mail_object =& Mail::factory("smtp"$smtpinfo);


Tested the script and the E\email sent correctly to: Japanese Outlook Express, Outlook 2000/2003, Japanese Thunderbird, Becky, several Docomo mobiles, several Softbank mobiles.
Note by: David Lidstone
Warning... Depending (I'm guessing) on your SMTP MTA some emails can be sent without dates and some with, unless you specify a date in the header. For example, my _locally_ delivered mail was ending up at the bottom of people's inboxes because it had a date of 1970. External mail was fine (header added by MTA?).

Add this header to fix:
'Date' => date("r")
Note by:
In order to send e-mail to cc or bcc with smtp you have to list the cc e-mail address both as a recipient (which decides where the e-mail is sent) and in the cc header, which tells the mail client how to display it.

Here is the code I use:

$to = '';
$cc = '';

$recipients = $to.", ".$cc;

$headers['From'] = '';
$headers['To'] = $to;
$headers['Subject'] = 'Test message';
$headers['Cc'] = '';
$headers['Reply-To'] = '';

$send = $mail->send($recipients, $headers, $body);
Note by: James Leckie
To handle errors when sending mail use the following. Great for checking if the SMTP server accepted all the addresses.

$send = $mail->send($to, $headers, $body);
if (PEAR::isError($send)) { print($send->getMessage());}
Note by: Mike Soh
It is important to note that the mail->send() function will wait for the socket to close. Your script may sit for a long time waiting for sendmail/mail/etc to exit.

You may prefer to store the mail information to be processed at a later time.