內部函數
mail函數
php本身提供了一個郵件發送函數mail,可以在程序中直接發送電子郵件,不過該函數要求服務器支持sendmail或者必須設置一臺不需要中繼的郵件發送服務器,但現在要找到一臺不需要身份驗證的郵件發送中繼幾乎不可能,所以使用mail函數往往無法成功發送email.
自己如果熟悉SMTP協議,結合socket功能就可以編寫高效穩定的郵件發送程序,但對一般用戶來說太困難.好在互聯網上已經有很多別人編寫好的郵件發送模塊,我們只需要下載後簡單調用即可,十分方便.
Mail配置選項
名稱 |
默認 |
描述 |
可更改 |
SMTP |
"localhost" |
Windows 專用:SMTP 服務器的 DNS 名稱或 IP 地址。 |
PHP_INI_ALL |
smtp_port |
"25" |
Windows 專用:SMTP 端口號。自 PHP 4.3 起可用。 |
PHP_INI_ALL |
sendmail_from |
NULL |
Windows 專用:規定從 PHP 發送的郵件中使用的 "from" 地址。 |
PHP_INI_ALL |
sendmail_path |
NULL |
Unix 系統專用:路徑(通常 /usr/sbin/sendmail 或 /usr/lib/sendmail) |
PHP_INI_SYSTEM |
郵件教程
第一步:需要下載PHPMailer文件包(下載地址見擴展閱讀)
第二步:確認你的服務器系統已經支持socket 如下圖,通過phpinfo();查看是否支持sockets
如果沒有這一項就請注意: socket 是屬於PHP擴展部分,編譯時必須給定一個用於./configure --enable-sockets 的配置選項。
第三步:把文件解壓到你的web服務器目錄下,調用類就可以了,說明:首先包含 class.phpmailer.php,然後創建對象,設置參數,調用成員函數。具體請見下面的示例代碼:
以下爲引用的內容:
<?php
require("phpmailer/class.phpmailer.php");
function smtp_mail ( $sendto_email, $subject, $body, $extra_hdrs, $user_name) {
$mail = new PHPMailer();
$mail->IsSMTP(); // send via SMTP phperz~com
$mail->Host = "200.162.244.66"; // SMTP servers
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "yourmail"; // SMTP username 注意:普通郵件認證不需要加 @域名
$mail->Password = "mailPassword"; // SMTP password
$mail->From = "你的郵件地址";
?>
發送示例代碼
下載該組件後,按如下示例編寫代碼即可實現php在線發送郵件.
一:前臺表單
<html>
<body>
<h3>phpmailer Unit Test</h3>
請你輸入<font color="#FF6666">收信</font>的郵箱地址:
<form name="phpmailer" action="send.php" method="post">
<input type="hidden" name="submitted" value="1"/>
郵箱地址: <input type="text" size="50" name="address" />
<br/>
<input type="submit" value="發送"/>
</form>
</body>
</html>
二:後臺PHP程序
<?php
require("class.phpmailer.php"); //下載的文件必須放在該文件所在目錄
$mail = new PHPMailer(); //建立郵件發送類
$address = $_POST['address'];
$mail->IsSMTP(); // 使用SMTP方式發送
$mail->CharSet='UTF-8';// 設置郵件的字符編碼
$mail->Host = "mail.xxxxx.***"; // 您的企業郵局域名
$mail->SMTPAuth = true; // 啓用SMTP驗證功能
$mail->Port = "***"; //SMTP端口
$mail->Username = ***@xxxx.***; // 郵局用戶名(請填寫完整的email地址)
$mail->Password = "******"; // 郵局密碼
$mail->From = ***@xxxx.***; //郵件發送者email地址
$mail->FromName = "您的名稱";
$mail->AddAddress("$address", "");//收件人地址,可以替換成任何想要接收郵件的email信箱,格式是AddAddress("收件人email","收件人姓名")
//$mail->AddReplyTo("", "");
//$mail->AddAttachment("/var/tmp/file.tar.gz"); // 添加附件
//$mail->IsHTML(true); // set email format to HTML //是否使用HTML格式
$mail->Subject = "PHPMailer測試郵件"; //郵件標題
$mail->Body = "Hello,這是測試郵件"; //郵件內容
$mail->AltBody = "This is the body in plain text for non-HTML mail clients"; //附加信息,可以省略
if(!$mail->Send())
{
echo "郵件發送失敗. <p>";
echo "錯誤原因: " . $mail->ErrorInfo;
exit;
}
echo "郵件發送成功";
?>
require("class.phpmailer.php");
$mail = new PHPMailer();
//通過數組方式存儲郵件接收者
$address = array('aaaaaa','bbbbbb');
//使用SMTP方式發送郵件
$mail->IsSMTP();
//郵局服務器
$mail->Host = 'smtp.exmail.*';
//開啓SMTP驗證
$mail->SMTPAuth = true;
//郵局主機中的用戶名
$mail->Username = 'admin';
//郵局密碼
$mail->Password = '123456';
$mail->Port=25;
//郵件發送者email地址
$mail->From = 'xxxxxxx';
//郵件來源(發件人)
$mail->FromName = 'PHPMailer羣發Demo';
$len = count($address);
for ($i=0; $i < $len; $i++) {
$mail->AddAddress($address[$i]);
}
$mail->Subject = $title;//郵件標題
$mail->Body = $content;//郵件內容
$mail->Send();
注意:
1. 郵件的字符集設置, $mail->CharSet = "GB2312"; // 這裏指定字符集!在這裏我只指定爲GB2312因爲這樣Outlook能正常顯示郵件主題,我嘗試過設爲utf-8但在Outlook下顯示亂碼。
2. 如果是發送html格式的郵件,那麼記得也指定
3. 如果你想用它來羣發郵件的話,記得修改包含文件函數,如:
require("phpmailer/class.phpmailer.php");
改爲
require_once("phpmailer/class.phpmailer.php");
否則的話會產生類的重定義。
個人認爲要使用phpmailer,首先,需要有一個郵件服務器,PHP的 mail函數沒有指定,應該是使用的PHP設置的SMTP。
而在這裏需要具體指定,同時需要指定郵件服務器的管理者和密碼。
PHPMailer 也是一個功能強大的郵件類
圖片按列