php mailer

利用 phpmailer 透過 gmail 寄信

開發程式有時候會需要讓系統可以替你發送信件
雖說php本身已有內件的mail()函式
但是問題往往卡在需要有一個SMTP伺服器
在網路上找的一些免費SMTP多半都有限制
比方說收件者數量、每天可寄幾封等等的
會需要到程式寄送信件卻通常都超過這個限制!!

所以這邊就介紹一下怎麼利用gmail的SMTP來幫你寄
不需要自己另架SMTP伺服器!!!
然後利用網路上寫得相當不錯的phpmailer寄信程式寄
需要自己寫的程式也就更少、更方便了

 

而要透過gmail寄信也還是有些小限制
比方說要開啟openssl
這點通常還是要自架的server才有權限更動

 

以下我就介紹幾個重點:
怎麼打開Appache的openssl功能
怎麼下載phpmailer
怎麼設定寄信信件內容

 

 

◎怎麼打開Appache的openssl功能

首先我們需要先複製兩個檔案
請先到你安裝AppServ的地方
進到php5資料夾裡

 

php mailer

 

在資料夾裡有兩個dll檔
libeay32.dllssleay32.dll
請先把它們複製

php mailer

php mailer

 

然後請到WINDOWS底下的system32資料夾
把剛剛的兩個dll檔直接貼上

php mailer

 

 

 

再來要修改一下php.ini的設定
修改的地方在這:

php mailer

 

php.ini是用文字文件開啟的

php mailer

 

 

打開php.ini之後
有兩處需要修改
請先ctrl + F叫出搜尋視窗
並設定尋找目標為 openssl

php mailer

 

找到之後
把前面原有的分號刪除即可

php mailer

 

之後一樣 ctrl + F 搜尋 smtp_port
如果找不到的話把向下改向上

php mailer

 

原本預設是25
請改成465

php mailer

 

改完這些地方之後存檔
並且重開Apache
重開的地方在:

php mailer

 

 

重開成功後
進入http://localhost/phpinfo.php
在裡面找到openssl就會發現已經顯示為enabled
這就代表可以使用openssl了

php mailer

 

 

 

◎去哪邊下載phpmailer?

phpmailer是一款免錢開放軟體
目前是由sourceforge提供官方下載
可以直接點選下面的網址進入

http://sourceforge.net/projects/phpmailer/files/phpmailer%20for%20php5_6/

(更正新連結:謝謝hfovg大大~ http://sourceforge.net/projects/phpmailer/files/phpmailer-ml/PHPMailer-ML_v1.8.1/PHPMailer-ML_v1.8.1_core.zip/download )

 

進入後會看見這一坨東西
請不要理下面那些
直接點上面綠色鈕旁邊的 View all files

 

php mailer

 

打開之後
會出現一些有的沒的
phpmailer-ml資料夾點一下打開子目錄
裡面的PHPMailer-ML_v1.8.1
最下面的zip檔就是原始碼(如圖)
下載這包就可以了

php mailer

 

抓完之後解壓縮

php mailer

 

解壓縮之後在以下的目錄裡面
就可以找到phpmailer主程式

php mailer  →  php mailerphp mailer


請把phpmailer整個資料夾
搬到Appserv的www資料夾中吧!!
看你要放在哪個子目錄都可以

 

 

◎怎麼設定寄信信件內容

控制寄信的主要檔案是class.phpmailer.php這個檔

php mailer

 

這裡面需要改兩個設定
在大約177行這附近
找一下就可以找到

原本的設定是這樣:

php mailer

 

把這兩項改成:

php mailer 

存檔之後就可以了

 

那再來
我自己要寄信的程式要怎麼呼叫phpmailer呢?
他主要的功能都已經包好
所以我們只要將它的功能拿出來用即可

 

require("../phpMailer/class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true; // turn on SMTP authentication
//這幾行是必須的

$mail->Username = "XXX@gmail.com";
$mail->Password = "*****";

//這邊是你的gmail帳號和密碼

$mail->FromName = "XXX";
// 寄件者名稱(你自己要顯示的名稱)
$webmaster_email = "XXX@gmail.com";
//回覆信件至此信箱


$email="XXX@XXX.XXX";
// 收件者信箱
$name="XXX";
// 收件者的名稱or暱稱
$mail->From = $webmaster_email;


$mail->AddAddress($email,$name);
$mail->AddReplyTo($webmaster_email,"Squall.f");
//這不用改

$mail->WordWrap = 50;
//每50行斷一次行

//$mail->AddAttachment("/XXX.rar");
// 附加檔案可以用這種語法(記得把上一行的//去掉)

$mail->IsHTML(true); // send as HTML

$mail->Subject = "信件標題";
// 信件標題
$mail->Body = "信件內容";
//信件內容(html版,就是可以有html標籤的如粗體、斜體之類)
$mail->AltBody = "信件內容";
//信件內容(純文字版)

if(!$mail->Send()){
echo "寄信發生錯誤:" . $mail->ErrorInfo;
//如果有錯誤會印出原因
}
else{
echo "寄信成功";
}

 

 

當然這程式還可以有其他變化
比方說利用表單和$_POST變數來存

傳送附檔如果前一頁表單是用檔案上傳欄位的話
也可以這樣寫:

if (is_uploaded_file($_FILES['uploadfile']['tmp_name'])){
$AtF = $_FILES['uploadfile']['name'];
$mail->AddAttachment($AtF);
}else {
//不做事
}
//傳送附檔


 

另外如果寄信有亂碼的話
不妨加上一條:

 mb_internal_encoding('UTF-8');  
可把內部預設編碼改為UTF-8
加在require("../phpMailer/class.phpmailer.php");的下一行

也可以利用iconv()來進行轉換
比方說
如果標題那邊原本是
 $mail->Subject = "信件標題"; 
就改成
 $mail->Subject = iconv("big5","UTF-8","信件標題"); 

 

 

 .

 .

 .

 .

 .

 .

 . 

 .

 .

創作者介紹

B E L L E A Y A 雜七雜八創作小窩

belleaya (愛) 發表在 痞客邦 PIXNET 留言(69) 人氣()


留言列表 (69)

發表留言
  • angela
  • 寫ㄉ太好ㄌ~感謝!!
  • 3QQ~

    belleaya (愛) 於 2011/10/18 20:06 回覆

  • 葵
  • 請問帳號要如何使用變數傳給不同的人

    我使用的環境是dreamweaver

    原本成功的程式碼為

    $mail->AddAddress("s0310388yahoo .com.tw", "你屌" ); //設定收件者郵件及名稱

    現在將資料庫的變數抓出來

    <方法一>
    程式碼改為

    $mail->AddAddress( "s0310388yahoo .com.tw" , $row_Recordset1['ord_name']);
    //設定收件者郵件及名稱

    結果:正常動作

    <方法二>
    程式碼改為

    $mail->AddAddress( $row_Recordset1['ord_email'] ,$row_Recordset1['ord_name']);
    //設定收件者郵件及名稱

    結果:Mailer Error:SMTP Error:The following SMTP Error : Data not accepted.

    請大大幫我這個忙,給我方向與方法,我已經從google找過,還是沒有答案
  • 你echo $row_Recordset1['ord_email']
    會有值出來嗎~~
    如果有的話
    問題應該就出在別的地方了

    belleaya (愛) 於 2011/11/07 22:25 回覆

  • 悄悄話
  • 悄悄話
  • 悄悄話
  • 悄悄話
  • 訪客
  • SMTP Error: Could not connect to SMTP host

    為什麼會出現這段話
  • 會是帳密打錯嗎?

    belleaya (愛) 於 2012/03/25 15:22 回覆

  • 帮帮忙
  • 出现Warning: stream_socket_enable_crypto() [streams.crypto]: this stream does not support SSL/crypto

    是什么问题呢?
    另外,http://localhost/phpinfo.php 却无法显示。
    object not found
  • 上面的問題要去php.ini啟動extension=php_openssl.dll
    下面的問題的話...你port有改嗎?還是預設?
    我自己是可以正常顯示的

    belleaya (愛) 於 2012/07/17 02:49 回覆

  • 請教一下
  • 出現
    Warning: fsockopen() [function.fsockopen]: unable to connect to ssl://smtp.gmail.com:465 (Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP?)
    的錯誤訊息
    為什麼呢??該如何解決??
  • felisa
  • 謝謝您的詳細解說
    我終於成功了><
  • 不客氣~~^^

    belleaya (愛) 於 2012/08/18 15:57 回覆

  • jelly
  • 請問深灰底的程式碼,是要輸入在哪裡呢?
    是我要寄信的網頁嗎?

    謝謝您囉
  • 是滴~~

    belleaya (愛) 於 2012/08/21 14:39 回覆

  • 猴仔
  • 大大 太感謝您了 ^q^
    卡了好多天了說
  • 不客氣~

    belleaya (愛) 於 2012/08/28 19:09 回覆

  • 訪客
  • 不好意思 想請問一下
    我按照步驟把檔案放到 system32 接著改 php.ini 然後 Apache Restart
    重開之後 到http://localhost/phpinfo.php
    可是都找不到 openssl 這個項目
    是不是我哪裡設定錯了
  • 呃~~要確定你修改的時候是系統管理員的權限喔
    不然win7會無視你的修改...

    belleaya (愛) 於 2013/01/30 18:55 回覆

  • 訪客
  • 成功啦~謝謝分享
  • 恭喜囉!!

    belleaya (愛) 於 2013/02/17 22:27 回覆

  • tata
  • 請問灰色的地方要怎麼使用? 是要建立一個檔案 還是修改哪裡?

    我到灰色地方之後就看不懂了= =
    --------------------------------------------------------------
    那再來
    我自己要寄信的程式要怎麼呼叫phpmailer呢?
    他主要的功能都已經包好
    所以我們只要將它的功能拿出來用即可
    --------------------------------------------------------------
  • 灰色那邊就是自己建立的php檔案囉~~
    建一個新的php
    然後把灰色區那些程式貼到你的新php上面~

    belleaya (愛) 於 2013/03/03 00:17 回覆

  • PHP初學者
  • 我照著大大的方式做到◎怎麼設定寄信信件內容
    控制寄信的主要檔案是class.phpmailer.php這個檔

    但是我找不到class.phpmailer.php這個檔

    執行結果
    錯誤訊息:Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 465, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\wamp\www\1\Ch05-16-2.php on line 79
    傳送失敗!
  • 我找到這個
    http://stackoverflow.com/questions/7011300/warning-mail-function-mail-failed-to-connect-to-mailserver

    他是說SMTP沒有連到~
    只是目前這樣看不知道是不是設定的問題...

    belleaya (愛) 於 2013/03/08 10:59 回覆

  • hfovg
  • 樓上的大大,
    請問你下載對檔案嗎@@
    因為下載檔案的路徑已經跟版主PO的有點不太一樣
    應該是找的到這個檔案才是..

    正確路徑:
    http://sourceforge.net/projects/phpmailer/files/phpmailer-ml/PHPMailer-ML_v1.8.1/PHPMailer-ML_v1.8.1_core.zip/download


    另外,給版主:
    您說的 mb_internal_encoding('UTF-8');
    可把內部預設編碼改為UTF-8

    小弟我測試後無效果,後來加上
    $mail->CharSet = "utf-8";
    就可以用,

    然後設定php.ini的地方,smtp_port是可以不用更改的,只需打開openssl


    以上分享,謝謝教學^^
  • 哇~~太感謝了!!!!
    我把它放上去唷~~

    belleaya (愛) 於 2013/03/08 11:00 回覆

  • PHP初學者
  • 我照著做到完 也下載PHPMailer-ML_v1.8.1_core的ZIP 也找到class.phpmailer.php這個檔並且設定完成顯示結果還是一樣

    執行結果
    Notice: Undefined variable: tel in C:\wamp\www\1\1\Ch05-16-2.php on line 67

    Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 465, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\wamp\www\1\1\Ch05-16-2.php on line 81
    傳送失敗!
  • 第一個Notice他說tel沒有定義說~

    第二個的話還是要看程式內容了......
    還是~~你方便把那個檔案寄給我看看嗎?
    deacon.lovlandgmail .com

    belleaya (愛) 於 2013/03/08 11:04 回覆

  • 悄悄話
  • hessbbq
  • 這個簡直就是酷斃了 謝謝大俠
  • 不客氣XDDD

    belleaya (愛) 於 2013/07/09 19:53 回覆

  • green
  • 請問
    $rmail=$_REQUEST["rmail"]."<br>";
    $gmailacc=$_REQUEST["gmailacc"]."<br>";
    $gmailpw=$_REQUEST["gmailpw"]."<br>";
    $subject=$_REQUEST["subject"]."<br>";
    $content=$_REQUEST["content"]."<br>";

    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->SMTPAuth = true; // turn on SMTP authentication
    //這幾行是必須的
    $mail->Username ="$gmailacc";
    $mail->Password ="$gmailpw";
    //這邊是你的gmail帳號和密碼

    為什麼gmail帳號密碼用變數代就會出現
    寄信發生錯誤:SMTP Error: Could not connect to SMTP host.
    如果直接打就可以寄信成功
    我有用echo 印接收的值確定有收到..
  • green
  • 我找到原因了
    好像是因為變數名取的跟request的一樣
    而且多了br...
    $rmail=$_REQUEST["rmail"]."<br>";
    $gmailacc=$_REQUEST["gmailacc"]."<br>";
    $gmailpw=$_REQUEST["gmailpw"]."<br>";
    $subject=$_REQUEST["subject"]."<br>";
    $content=$_REQUEST["content"]."<br>";
    讓我用好久阿...
  • 喔喔!!
    我現在才看到網誌的留言......
    變數名稱真的很容易不小心重覆到

    belleaya (愛) 於 2013/08/03 02:00 回覆

  • J
  • 我後來在localhost端可以順利寄出
    但是架上網站上就沒辦法
    出現了這個
    Warning: fsockopen() [function.fsockopen]: unable to connect to ssl://smtp.gmail.com:465 (Connection timed out) in /public_html/phpmailer/class.smtp.php on line 122
  • 因為網站的ssl設定的問題~
    看看是不是因為php.ini那邊設定沒有改到~

    belleaya (愛) 於 2013/08/18 22:55 回覆

  • 如玉 戴
  • 你好~我想請問你有關於MANTIS的問題,我設定MANTIS的MAIL已經快兩個禮拜了,但我是始終無法正常發送註冊信,我現在最新的問題是,我所設定的SMTP伺服器(公司/GMAIL)會發送註冊信,但是會延遲大約四~五天,而且信件內部的連結(URL)也無法使用,我還是無法進行註冊,不知道你有沒有解決過類似的問題可以給我建議,謝謝
  • 我沒用過那套系統說
    通常寄信會延遲要嘛是對方POP3伺服器慢
    不然就是寄信這邊SMTP的問題
    不過我對這塊不懂所以......

    belleaya (愛) 於 2013/09/02 16:31 回覆

  • 黑狗
  • 大大您好
    你解說的超級好
    但我能請教您個問題嗎
    我想要傳送的信箱是變動的
    我存在資料庫中
    該如何呈現呢
    謝謝
  • 那就把會變動的地方改成資料庫變數叫出來就好囉~

    belleaya (愛) 於 2013/09/11 19:50 回覆

  • 黑狗
  • 大大您好
    我已經可以寄出
    但是我只能寄信於資料庫最後一個人資料
    我該如何改程式碼
    才能寄給"指定"的人呢
    ----------------------------
    //我改的地方
    $email=$row_Recordset1['a_mail'];
    謝謝大大回應
  • 呃~~那就是你要取得的值是怎來的囉
    如果是自動從資料庫抓
    他就一定會最後一個
    除非你前一頁設表單來決定你要選擇的收件人
    然後用逗點隔開
    再傳值給email來抓

    belleaya (愛) 於 2013/09/22 19:18 回覆

  • Ming Hsiu
  • 我使用Railo內建的標籤,簡單又明遼。
    <cfmail from="mailAddress" to="mailAddress" subject="cfmail test" charset="utf-8" failto="fail reply mail">
    contents........................
    </cfmail>

    都在標籤內操作完成。

    看到php mailer 寫這麼多又有點難度,蠻辛苦的。

    如果寫整套系統,肯定要翻掉。
  • 哇~~謝謝提供!!!
    找機會試試

    belleaya (愛) 於 2013/11/24 04:12 回覆

  • 豆
  • 大大您好
    我照你這樣設定卻出現...
    Warning : fsockopen() [ function.fsockopen ]: unable to connect to ssl://smtp.gmail.com:465) in D:\AppServ\www\monographic\phpmailer\class.smtp.php on line 122 Mailer Error: SMTP Error: Could not connect to SMTP host.

    不知道要怎麼解決...
  • http://blog.yogo.tw/2009/08/phpopenssl.html
    這個~~要先打開openssl的權限~

    belleaya (愛) 於 2013/11/24 04:14 回覆

  • Ming Hsiu
  • 我又來了!
    取資料庫資料,只要這樣做。

    <cfquery datasource='dsnName' name='xxx'>
    select * from tableName
    </cfquery>

    要輸出這樣做:
    <cfoutput query='dsnName'>#欄位名#</cfoutput>

    cfml 簡單乾淨,不用過多的符號,它只用##
    當使用過它之後,很少人可以再回頭用別的。
  • 感覺好威喔@@!!!
    所以只要取資料時就打資料庫語法而已唷?

    真的簡單很多......

    belleaya (愛) 於 2013/11/27 00:00 回覆

  • 豆
  • 大大您好
    你回應說沒開openssl的權限
    但是我在http://localhost/phpinfo.php 裡面看openssl
    是這樣
    OpenSSL support enabled
    OpenSSL Version OpenSSL 0.9.8g 19 Oct 2007
    這樣應該是有啟動才對
    但還是出現
    Warning : fsockopen() [ function.fsockopen ]: unable to connect to ssl://smtp.gmail.com:465) in D:\AppServ\www\monographic\phpmailer\class.smtp.php on line 122 Mailer Error: SMTP Error: Could not connect to SMTP host.
    不知道怎麼解決...
  • 這個嘛......
    這我就真的不太清楚了@@
    我google也是多寫ssl問題而已......

    belleaya (愛) 於 2013/11/27 00:01 回覆

  • 煙燻小野貓
  • 您好!!!請問其他信箱可用嗎?還是此版本僅適合gmail
  • 有其他SMTP伺服器都可以用唷!!
    不過要改一些地方就是了

    belleaya (愛) 於 2014/01/15 05:14 回覆

  • Leaf
  • 你好 我照大大的教學做了但PHPINFO()還是這樣
    OpenSSL support disabled (install ext/openssl)
    請問是要安裝什麼嗎
  • Leaf
  • 我問題解決了^^
    謝謝大大的分享 不勝感激
  • 喔喔!!!
    恭喜囉~~~XDDD

    belleaya (愛) 於 2014/02/05 03:02 回覆

  • 123
  • 那個 你的程式碼 是直接我拿來改就可以用的? 檔案要存成php檔還是html?
  • 應該照步驟直接改就好囉
    存成php!

    belleaya (愛) 於 2014/03/29 00:12 回覆

  • sage20236
  • 大大您好如果我想要寄出信件同時CC給一個人 我該怎麼做
  • 我的話可能就是直接把兩個mail合在一起當正本一起寄......

    belleaya (愛) 於 2014/04/22 07:36 回覆

  • 邱錢錢
  • 你好,
    我按照你的步驟來做,可是,我在http://localhost/phpinfo.php,找不到openssl
  • 重開阿怕契和mysql之後應該就有囉!

    belleaya (愛) 於 2014/04/24 17:56 回覆

  • 邱錢錢
  • 版大你好,
    按照你得步驟來做,我可以直接拿你的城市馬來試試看嗎?
    因為我是用Dreameaver來做,所以這個程式碼是要獨立出來一個PHP檔,還是要放在我要寄認證信的網頁裡?
    如果是要放在寄認證信的網頁哩,版大的程式碼要放在哪一行裡啊?
  • 一種作法是把寄信的獨立出一頁
    放在你寄信那頁的表單的下一頁
    去抓到$_POST的值傳給程式去寄就可以囉
    $_post用法在這:
    http://belleaya.pixnet.net/blog/post/30538510

    belleaya (愛) 於 2014/04/24 17:58 回覆

  • Ming fu
  • 我想詢問一下,附加檔案傳一張存放sever的圖片網址如下,$mail->AddAttachment("http://IP位址/資料夾/檔名.jpg");
    郵件寄出但圖片沒有附加上去,能幫我解決問題嗎?

    謝謝
  • 是不是因為沒有把表單改成multi呢?
    http://belleaya.pixnet.net/blog/post/32216739

    belleaya (愛) 於 2014/05/04 22:17 回覆

  • Reegin
  • 感謝版主~初步測試信已發送成功!
  • 耶~~~

    belleaya (愛) 於 2014/06/09 00:21 回覆

  • dwyanelin
  • 好難過 用了好久 也顯示寄信成功了 但就是沒收到
  • 是喔~~所有收信者都沒收到唷?

    belleaya (愛) 於 2014/06/09 00:21 回覆

  • dwyanelin
  • 對阿全部都沒收到,不過我用本身的語法成功了,所以就先這樣吧XD
  • 喔喔!!! XD

    belleaya (愛) 於 2014/07/04 03:39 回覆

  • Wayne
  • 我曾經成功了並把他掛在自己的WORDPRESS上, 過了2天後突然再測試寄信到自己的郵箱時又收不到來自phpmailer的信, 想請教一下,有人知道嗎? 其中甚麼都沒做, 只是
    新增了一個 wordpress的掛件叫 wp-mail讓WORDPRESS可以用gmail發郵件, 我下載這個只是想試試用, 怎知道之後我再收不到phpmailer的信... 求助
  • 這我就真的不太清楚了...
    wordpress的套件我沒試過
    會忽然失效應該是一些變數出問題?
    他在發信之後有出現什麼以前沒看過的訊息嗎?

    belleaya (愛) 於 2014/07/21 13:46 回覆

  • Wayne
  • 我這個是用來從MySQL中的電郵客戶群發, 我的 code 如下:

    <?php

    require("../phpMailer/class.phpmailer.php");
    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->SMTPAuth = true; // turn on SMTP authentication
    //這幾行是必須的

    $mail->Username = "wayneyip216gmail .com";
    $mail->Password = "xxxxxx";
    //這邊是你的gmail帳號和密碼

    $mail->FromName = "Wayne Yip";
    // 寄件者名稱(你自己要顯示的名稱)
    $webmaster_email = "wayneyip216gmail .com";
    //回覆信件至此信箱

    $dbc = mysqli_connect('localhost', 'xxx', 'xxxx', 'elvis_store') //連接MYSQL取得客戶資料
    or die('Error connecting to MySQL server.');

    $query = "SELECT * FROM email_list";
    $result = mysqli_query($dbc, $query)
    or die('Error querying database.');

    while ($row = mysqli_fetch_array($result)){

    $email=$row['email'];
    // 收件者信箱
    $name= $row['first_name'].$row['last_name'];
    // 收件者的名稱or暱稱

    }


    $mail->From = $webmaster_email;


    $mail->AddAddress($email,$name);
    $mail->AddReplyTo($webmaster_email,"Squall.f");
    //這不用改

    $mail->WordWrap = 50;
    //每50行斷一次行

    //$mail->AddAttachment("/XXX.rar");
    // 附加檔案可以用這種語法(記得把上一行的//去掉)

    $mail->IsHTML(true); // send as HTML

    $mail->Subject = $_POST['subject'];
    // 信件標題
    $mail->Body = $_POST['elvismail'];
    //信件內容(html版,就是可以有html標籤的如粗體、斜體之類)
    $mail->AltBody = $_POST['elvismail'];
    //信件內容(純文字版)

    if(!$mail->Send()){
    echo "寄信發生錯誤:" . $mail->ErrorInfo;
    //如果有錯誤會印出原因
    }
    else{
    echo "寄信成功";
    }

    ?>
  • 乍看感覺沒啥問題呀
    (我是還沒細看)
    他寄出後有顯示寄信成功嗎?

    belleaya (愛) 於 2014/07/21 13:48 回覆

  • kin
  • 想請問一下 這種寄信的方法可以用在XAMPP上面麼? 還是只能用於appserver
  • 我不是很確定耶~~
    我沒用過xampp
    你可以試試看?

    belleaya (愛) 於 2014/11/21 20:47 回覆

  • 李小靜
  • 非常謝謝版大熱心提供教學,跟著設定後可以成功發信了。但還有亂碼跟附件傳送的問題待解決,明天再努力!!

    回應 #51 kin 的問題,我是使用XAMPP ^^。
  • david
  • 請問一下 我照上面方法做了
    她顯示成功寄出 可是我在信箱裡卻沒有收到信 請問是哪裡出錯了?
  • 連垃圾信也沒有嗎?
    線索太少了我很難猜得出問題在哪...

    belleaya (愛) 於 2015/02/03 17:40 回覆

  • 阿凱
  • 我一直都錯在LINE 3
    第三行是
    require("../phpMailer/class.phpmailer.php");
    錯誤訊息顯示:Parse error: syntax error, unexpected T_REQUIRE in C:\AppServ\www\s2mail.php on line 3
  • 可以貼一下前後幾行程式嗎~~~
    感覺有可能是前或後有打錯東西

    belleaya (愛) 於 2015/04/09 14:46 回覆

  • 阿凱
  • 我目前程式問題已解,但我現在送出後葉面空白然後就沒有動作
    我也照上面設定但無法成功我想PO一下我的城市
    <?PHP
    $dir = dirname(__FILE__);

    require_once $dir .'../phpmailer/class.phpmailer.php';
    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->SMTPAuth = true;

    $mail->Username = "USERgmail .com";
    $mail->Password = "XX";

    $mail->FromName = "j";

    $webmaster_email = "USERgmail .com";



    $email="XXXSN .tw";

    $name="get";
    $mail->From = $webmaster_email;


    $mail->AddAddress($email,$name);
    $mail->AddReplyTo($webmaster_email,"Squall.f");


    $mail->WordWrap = 50;


    $mail->IsHTML(true);

    $mail->Subject = "信件標題";

    $mail->Body = "信件內容";

    $mail->AltBody = "信件內容";


    if(!$mail->Send()) {
    echo "發送錯誤: " . $mail->ErrorInfo;
    } else {
    echo "<div align=center>寄信成功!</div>";
    }
    ?>

  • 暫時還看不太出會空白的原因
    他連"發送錯誤"都沒出現的話
    代表問題在傳值過去時就已經有問題了所以沒有send()
    可以先在前面穿插一些 echo "現在跑到這邊1";
    echo "現在跑到這2";
    來確認程式有執行到哪邊~

    belleaya (愛) 於 2015/04/10 20:46 回覆

  • 訪客
  • 我出現和#16一樣的問題,後來從這裡找到解決辦法
    http://www.minwt.com/php/1530.html
    sendmail.php

    根據猜測應該是有某些設定沒有設定到
  • 太感謝囉!!

    belleaya (愛) 於 2015/04/10 20:46 回覆

  • 訪客
  • 不好意思,請問是哪裡沒設定到??
    Strict Standards: date() [function.date]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'UTC' for '8.0/no DST' instead in C:\AppServ\www\PHPMailer\class.phpmailer.php on line 1612

    Strict Standards: date() [function.date]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'UTC' for '8.0/no DST' instead in C:\AppServ\www\PHPMailer\class.phpmailer.php on line 1616

    Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: 無法識別這台主機。 in C:\AppServ\www\PHPMailer\class.smtp.php on line 122

    Warning: fsockopen() [function.fsockopen]: unable to connect to �€slsmtpgmailcom�€�:465 (php_network_getaddresses: getaddrinfo failed: 無法識別這台主機。 ) in C:\AppServ\www\PHPMailer\class.smtp.php on line 122
    撖縑���隤歹�MTP Error: Could not connect to SMTP host.
  • 這個我就不太清楚了@@
    你可能要直接把關鍵字丟google查查看囉
    Strict Standards: date() [function.date]: It is not safe to rely on the system's timezone settings.

    belleaya (愛) 於 2015/05/05 00:33 回覆

  • 皇劍君
  • 感謝大大的分享, 我成功了....
    不過不好意思, 我是新手, 寄單一封成功了, 但想請問一下, 如果收件人想改成從資料庫裡抓出來, 應該用什麼語法才行? 因為我對php還是一知半解, 試了很多方法都不太行...

    我有一個資料表, 名為email_list, 裡面其中一欄叫email, 儲存了一些地址...

    這是我原本的(成功的):

    <?php
    include("C:\AppServ\www\phpmailer\class.phpmailer.php");
    $mail= new PHPMailer();
    $mail->IsSMTP();
    $mail->SMTPAuth = true;
    $mail->SMTPSecure = "ssl";
    $mail->Host = "smtp.gmail.com";
    $mail->Port = 465;
    $mail->CharSet = "big5";
    $mail->Username = "XXXgmail .com";
    $mail->Password = "XXXXX"; //
    $mail->From = "XXXgmail .com"; //寄件者信箱
    $mail->FromName = "123"; //寄件者姓名
    $mail->Subject = "New Upate From 123"; //標題
    $mail->Body = "大家好
    "; //郵件內容
    $mail->IsHTML(true); //郵件內容為HTML
    $mail->AddAddress("XXXlive .hk", "Test1"); //收件者郵件及名稱

    if(!$mail->Send()) {
    echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
    echo "Message sent!";
    }
    ?>
  • 從資料庫抓的話
    主要就是要設定幾個變數
    比方$mailname=從資料庫裡抓出的收件人姓名的字串
    $mailaddr=從資料庫裡抓出收件人信箱的字串
    等等的
    之後把$mail->AddAddress("XXXlive .hk", "Test1");這行
    改成$mail->AddAddress($mailaddr, $mailname);



    至於從資料庫抓值的部份就用dreamweaver的功能就好囉~

    belleaya (愛) 於 2015/05/05 00:37 回覆

  • l02162010
  • Warning: fsockopen(): in C:\wamp\www\phpmailer\class.smtp.php on line 122
    Call Stack
    # Time Memory Function Location
    1 0.0000 243712 {main}( ) ..\aaa.php:0
    2 0.0000 663424 PHPMailer->Send( ) ..\aaa.php:46
    3 0.0000 670640 PHPMailer->SmtpSend( ) ..\class.phpmailer.php:410
    4 0.0000 838040 PHPMailer->SmtpConnect( ) ..\class.phpmailer.php:517
    5 0.0000 839616 SMTP->Connect( ) ..\class.phpmailer.php:601
    6 0.0000 839760 fsockopen ( ) ..\class.smtp.php:122

    ( ! ) Warning: fsockopen(): in C:\wamp\www\phpmailer\class.smtp.php on line 122
    Call Stack
    # Time Memory Function Location
    1 0.0000 243712 {main}( ) ..\aaa.php:0
    2 0.0000 663424 PHPMailer->Send( ) ..\aaa.php:46
    3 0.0000 670640 PHPMailer->SmtpSend( ) ..\class.phpmailer.php:410
    4 0.0000 838040 PHPMailer->SmtpConnect( ) ..\class.phpmailer.php:517
    5 0.0000 839616 SMTP->Connect( ) ..\class.phpmailer.php:601
    6 0.0000 839760 fsockopen ( ) ..\class.smtp.php:122
    寄信發生錯誤:SMTP Error: Could not connect to SMTP host.



    不好意思 不知道為何不行,防火牆關了還是跑這個
    我用的是WAMP 會有關係嗎?
    麻煩您了也謝謝您
  • 哇~~~
    其實我......也不知道為什麼會這樣說@@

    查了一下他fsockopen()函式的用法
    http://php.net/manual/en/function.fsockopen.php
    不過不太知道他問題出在哪@@
    完全不熟啊啊啊

    belleaya (愛) 於 2015/05/20 00:09 回覆

  • 路人甲
  • 請問大大
    我的會出現
    Warning: fsockopen(): unable to connect to ssl://smtp.gmail.com:465 (Permission denied) in /var/www/html/phpMailer/class.smtp.php on line 122 通知信件寄出失敗Mailer Error: SMTP Error: Could not connect to SMTP host.
    伺服器是linux的
    不知大大是否知道問題在哪
  • 這......我不清楚說><
    只能直接把錯誤訊息丟Google囉

    belleaya (愛) 於 2015/07/04 23:56 回覆

  • 蝸牛
  • 量發的大,一樣會被擋
    Gmail 一天只能寄500封信
  • 是的!

    belleaya (愛) 於 2015/07/04 23:55 回覆

  • 訪客

  • 大家好! 我的問題和#39leaf一樣。 PHPINFO()還是這樣
    OpenSSL support disabled (install ext/openssl)
    煩請版主、#39leaf和各位大大幫忙看看是那裡設定錯誤、還是程式錯了;在此先謝謝大家幫忙。我是用wamp.
    ---------------------------------------------
    php.ini設定:
    extension=php_openssl.dll
    SMTP = smtp.gmail.com
    smtp_port = 465
    sendmail_from = yyyyyygmail .com

    C:\wamp\bin\apache\Apache2.2.11\bin中有
    php_openssl.dll;
    ssleay32.dll;
    libeay32.dll

    C:\WINDOWS\system32中有
    php_openssl.dll;
    ssleay32.dll;
    libeay32.dll

    C:\wamp\bin\php\php5.3.0中有
    ssleay32.dll;
    libeay32.dll

    C:\wamp\bin\php\php5.3.0\ext中有
    php_openssl.dll


    sendMail.php 程式碼如下:

    <?php
    require("class.phpmailer.php");
    $mail->CharSet = "utf-8";
    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->Host = "ssl://smtp.gmail.com:465"; // SMTP server

    $mail->SMTPAuth = true; // turn on SMTP authentication
    //這幾行是必須的

    $mail->SMTPSecure = "ssl"; // Gmail的SMTP主機需要使用SSL連線
    $mail->Port = 465; //Gamil的SMTP主機的埠號(Gmail為465)。


    $mail->Username = "yyyyyygmail .com";
    $mail->Password = "xxxxxxxx";
    //這邊是你的gmail帳號和密碼

    $mail->FromName = "tom";
    // 寄件者名稱(你自己要顯示的名稱)
    $webmaster_email = "yyyyyygmail .com";
    //回覆信件至此信箱

    $email = "xxxxx@ms48.hint.net";
    // 收件者信箱

    $name="mary";
    // 收件者的名稱or暱稱
    $mail->From = $webmaster_email;


    $mail->AddAddress($email,$name);


    $mail->AddReplyTo($webmaster_email,"Squall.f");
    //這不用改

    $mail->WordWrap = 50;
    //每50行斷一次行

    $mail->IsHTML(true); // send as HTML

    $mail->Subject = "信件標題";
    // 信件標題

    $mail->Body = "信件內容";
    //信件內容(html版,就是可以有html標籤的如粗體、斜體之類)
    $mail->AltBody = "信件內容";
    //信件內容(純文字版)

    if(!$mail->Send()){
    echo "寄信發生錯誤:" . $mail->ErrorInfo;
    //如果有錯誤會印出原因
    }
    else{
    echo "寄信成功";
    }

    ?>


    錯誤訊息:
    Deprecated: Function split() is deprecated in C:\wamp\www\mail\class.phpmailer.php on line 473
    發送錯誤: Could not instantiate mail function.
    --------------
    我把class.phpmailer.php 的 line 473-------split()改成explode();
    //$toArr = split(',', $to);
    $toArr = explode(',', $to);

    錯誤訊息:
    發送錯誤: Could not instantiate mail function.
  • 糟糕~我google後看不太懂錯誤訊息......

    belleaya (愛) 於 2015/08/01 17:05 回覆

  • 訪客
  • 不好意思...想請問編碼的問題...
    依照您所教學的方式,已經可以成功寄信
    標題、收件者名稱等等,也都由
    $name = "=?UTF-8?B?" . base64_encode($name) . "?=";
    這個方法,可以正常顯示中文了
    但是
    內容的地方怎麼改就都還是亂碼...
    請問有什麼方法可以讓它能夠正常顯示中文字嗎?
    感謝您!
  • 訪客
  • 我是#63......
    找到怎麼改了!
    在class.phpmailer.php這個檔案裡面
    (約在第50行) var $CharSet = 'iso-8859-1';
    改成var $CharSet = 'UTF-8';
    如此一來
    在sendmail.php檔案裡面
    即使不寫 mb_internal_encoding('UTF-8');
    也沒關係
    仍然會正常顯示中文! :)
  • 謝謝你!!!>"<

    belleaya (愛) 於 2015/08/01 17:04 回覆

  • superbomb
  • 請問大大...
    我根據你的步驟撰寫...
    1.信件有成功寄出去(寄給自己)
    2.但就是沒有收到
    3.需要提供哪些訊息,才方便知道錯誤
    是否能提供意見(windows system),謝謝
  • 一樣是寄給自己的gmail嗎??
    若要確認機制正確性
    可以先另外弄一頁php
    直接給定要傳的值
    確認可收到信 再弄表單那些的

    belleaya (愛) 於 2015/10/30 08:21 回覆

  • Lance
  • 不好意思,想請您一下,如果我的apache沒安裝在系統槽上會不會影響該功能的使用,因為我的phpinfo內顯示openssl是enable的,但是我測試信件卻寄不出去,我網頁會顯示伺服器錯誤 500 ,而我打開php error他是告訴我PHP Parse error: syntax error, unexpected $end ,但我參數都設定好了.
    另外 關於收件者的信箱有規定必須要是gmail嗎?還是yahoo,hinet這種其他信箱都可以收.
  • 感覺上安裝在D槽應該是沒差說
    應該是有其他參數要再改?
    這部份你可能要查一下網路上有沒有關於安裝在別槽的特別設定的文章了~~~

    收件者不限唷!

    belleaya (愛) 於 2015/11/25 12:03 回覆

  • Allen
  • 不好意思,想請問您,原本幾個禮拜前設定完後都可以使用,但前幾天突然寄不出去,google了錯誤訊息修改後,還是無法成功
    現在跑出的錯誤訊息是
    寄信發生錯誤:Could not instantiate mail function.

    google了很多 還是沒辦法解~
    請問您能給我些意見或幫助嗎~
  • markjj
  • 同67樓
    一直出現failCould not instantiate mail function.
  • 訪客
  • Q:gmail Could not connect to SMTP host.
    A:需啟用安全性較低的應用程式存取權
找更多相關文章與討論