php利用smtp類來發郵件真是屢試不爽,我用過很久了,基本上沒出過問題。本博客后臺,當博主回復留言時候,會自動給網友發一封有新回復提示的郵件也是用的本文這個方法實現的。
?php
/**
* @param $address mixed 收件人 多個收件人/或需要設置收件人昵稱時為數組 array($address1,$address1)/array(array('address'=>$address1,'nickname'=>$nickname1),array('address'=>$address2,'nickname'=>$nickname2))
* @param $subject string 郵件主題
* @param $body string 郵件內容
* @param $file string 附件
* @return bool|string 發送成功返回true 反之返回報錯信息
* @throws Exception
*/
function send_mail_by_smtp($address, $subject, $body, $file = '')
{
require('./PHPMailer-master/Exception.php');
require('./PHPMailer-master/PHPMailer.php');
require('./PHPMailer-master/SMTP.php');
//date_default_timezone_set("Asia/Shanghai");//設定時區東八區
$mail = new PHPMailer();
//Server settings
$mail->SMTPDebug = 2;
$mail->isSMTP(); // 使用SMTP方式發送
$mail->Host = 'smtp.126.com'; // SMTP郵箱域名
$mail->SMTPAuth = true; // 啟用SMTP驗證功能
$mail->Username = "*****@126.com"; // 郵箱用戶名(完整email地址)
$mail->Password = "*****"; // smtp授權碼,非郵箱登錄密碼
$mail->Port = 25;
$mail->CharSet = "utf-8"; //設置字符集編碼 "GB2312"
// 設置發件人信息,顯示為 你看我那里像好人(xxxx@126.com)
$mail->setFrom($mail->Username, '你看我那里像好人');
//設置收件人 參數1為收件人郵箱 參數2為該收件人設置的昵稱 添加多個收件人 多次調用即可
//$mail->addAddress('********@163.com', '你看我那里像好人');
if (is_array($address)) {
foreach ($address as $item) {
if (is_array($item)) {
$mail->addAddress($item['address'], $item['nickname']);
} else {
$mail->addAddress($item);
}
}
} else {
$mail->addAddress($address, 'adsf');
}
//設置回復人 參數1為回復人郵箱 參數2為該回復人設置的昵稱
//$mail->addReplyTo('*****@126.com', 'Information');
if ($file !== '') $mail->AddAttachment($file); // 添加附件
$mail->isHTML(true); //郵件正文是否為html編碼 true或false
$mail->Subject = $subject; //郵件主題
$mail->Body = $body; //郵件正文 若isHTML設置成了true,則可以是完整的html字符串 如:使用file_get_contents函數讀取的html文件
//$mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; //附加信息,可以省略
return $mail->Send() ? true : 'ErrorInfo:' . $mail->ErrorInfo;
}
$path = '.\wpic907.jpg';
$ret = send_mail_by_smtp('*******@163.com', 'PHPMailer郵件標題', 'PHPMailer郵件內容', $path);