phpmailsmtp
1. php 郵件系統 Smtp 設置
server:smtp.qq.com//發件伺服器對不對你先按著注釋試一把。
form:[email protected]//發件人
address://不填寫
smtp_name:[email protected]//發件伺服器賬號與發件人保持一致
smtp_pass:****//發件伺服器登錄密碼
smtp_ssl:465//埠
2. 請問一下,PHP配置SMTP怎麼弄
PHPMailer的獲取:
PHPMailer項目地址:PHPMailer 使用git命令克隆到本地,或直接在該項目頁面的右下方點擊「 Download ZIP 」即可獲取到完整的PHPMailer代碼包,再到本地解壓即可。
步驟一:使我們的QQ郵箱能夠發送郵件
這里怎麼說能夠發送郵件呢?其實我們的郵箱都是可以發送郵件的,但是要實現在我們的網站中發送郵件,那就要設置一下我們的QQ郵箱了,因為此時我們的網站現在是作為一個第三方客戶端存在的。
步驟一:使我們的QQ郵箱能夠發送郵件
這里怎麼說能夠發送郵件呢?其實我們的郵箱都是可以發送郵件的,但是要實現在我們的網站中發送郵件,那就要設置一下我們的QQ郵箱了,因為此時我們的網站現在是作為一個第三方客戶端存在的
由於待會我們用到的是SMTP伺服器來發送,在這里建議把前面的兩項開啟了!當你點擊開啟的時候,它會提示:
<?phprequire_once("./functions.php");$flag=sendMail('[email protected]','lsgo在線通知','恭喜你成功加入LSGO實驗室,開啟你的學習之旅吧!');if($flag){echo"發送郵件成功!";
}else{echo"發送郵件失敗!";
}?>
3. 要使用SMTP或PHP mail函數發送郵件需滿足什麼條件(伺服器發不了郵件..囧rz)
關於查看埠狀態:
你應該可以得到伺服器的IP地址吧,得不到也沒關系,應該有域名才對。
然後使用你的本機telnet你的伺服器25埠,看是否有數據返回
具體做法是運行->CMD->輸入命令telnet xxx.com 25
如果你使用的是win7系統,沒有安裝telnet系統功能的話,可以到以下位置打開:
控制面板->程序和功能->(左側列表最下方)打開或關閉windows功能->Telenet客戶端->打勾後確定
待安裝好後,重啟cmd,重新嘗試第一個操作
如果遲遲保持在「正在連接....」狀態好一會,而後出現「無法打開到主機的連接。在埠 25:連接失敗,那證明伺服器沒有開通25口,如果你用的是VPS,埠好像可以自行配置,畢竟是linux系統,我不太會配置,你自行找相關的方法,如果是虛擬伺服器,那就不行了,不過你可以再弄個企業郵局,或者使用申請的其它郵箱,比如網易的、新浪的、gmail的等等,依然可以使用郵件功能,但就不能使用PHP內置的mail函數了。
具體使用遠程SMTP伺服器來發送郵件的方法,你可以參考我以前回答的問題,你也可以使用現有的許多mail類庫實現
我以前回答過的問題:http://..com/question/478821120.html?oldq=1
另外,使用telnet功能不順手,可以網路一款專業埠刺探軟體:superscan
4. PHP如何通過SMTP驗證發送郵件
PHP mail()與SMTP驗證
缺乏靈活性是PHP的mail()函數顯得過於簡單的部分原因。最重要而且令人沮喪的是,死板的mail()函數通常還不允許你使用你選擇的SMTP伺服器,並且它也根本不支持如今已被眾多郵件伺服器採用的SMTP驗證。
幸運的是,克服PHP本身的缺陷既不困難,也不麻煩,更不痛苦。對於大多數情況下的郵件應用,免費的PEAR Mail包足夠提供全部的所需功能與靈活性,並且它也能夠與你期望的外部郵件伺服器進行驗證。在提高安全性的方面,它也支持SSL連接。
通過SMTP驗證在PHP腳本中發送郵件
在PHP腳本中通過SMTP驗證連接外部SMTP伺服器並且發送郵件的方法如下:
確保PEAR Mail包已經安裝。
通常,它已經安裝到了PHP之中,尤其在PHP 4及以後的版本中。放手一試吧。
<?php
require_once"Mail.php";
$from="SandraSender<s>";
$to="RamonaRecipient<r>";
$subject="Hi!";
$body="Hi, Howareyou?";
$host="mail.example.com";
$username="smtp_username";
$password="smtp_password";
$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)){
echo("<p>".$mail->getMessage()."</p>");
}else{
echo("<p>Messagesuccessfullysent!</p>");
}
?>
5. phpmailer的SMTP伺服器賬號和密碼怎麼設置
應該還有一個pop域名,得寫你使用的郵箱域名。
username和password 就是你郵箱的用戶名,和你的郵箱密碼。
比如這是新浪的pop,smtp
6. 如何使用php通過smtp發送郵件步驟
由於php沒有提供現成的smtp函數,卻提供了一個功能不甚靈活的mail()函數,這個函數需要伺服器配置上的支持,並且不支持smtp驗證,在很多場合無法正常的工作,因此不建議使用。
首先是使用telnet來連接本地的25埠,稍微熟悉點網路的人都知道smtp協議使用25埠,這也就是說,現在在連接本地的smtp伺服器。
<?php
require_once'Mail.php';
$conf['mail']=array(
'host'=>'xx.xx.xx.xx',//smtp伺服器地址,可以用ip地址或者域名
'auth'=>true,//true表示smtp伺服器需要驗證,false代碼不需要
'username'=>'tester',//用戶名
'password'=>'retset'//密碼
);
/***
*使用$headers數組,可以定義郵件頭的內容,比如使用$headers['Reply-To']可以定義回復地址
*通過這種方式,可以很方便的定製待發送郵件的郵件頭
***/
$headers['From']='[email protected]';//發信地址
$headers['To']='[email protected]';//收信地址
$headers['Subject']='testmailsendbyphp';//郵件標題
$mail_object=&Mail::factory('smtp',$conf['mail']);
$body=<<<MSG//郵件正文
helloworld!!!
MSG;
$mail_res=$mail_object->send($headers['To'],$headers,$body);//發送
if(Mail::isError($mail_res)){//檢測錯誤
die($mail_res->getMessage());
}
?>7. php smtp發送郵件問題
這個吧 是你沒等伺服器返回寫入正確之後就直接繼續往socket里繼續通信了
每個fwrite後和fsockopen後面加個
fgets($connect,64);
對了先把socket設置成阻塞模式(這個你可以自行搜索)
define(CRLF, '\r\n');
$errno = null;
$errstr = null;
$connect = fsockopen('smtp.qq.com',25,$errno,$errstr,30);
socket_set_blocking($connect, true);
echo fgets($connect,64);
fwrite($connect, 'HELO localhost'.CRLF);
echo fgets($connect,64);
fwrite($connect, 'AUTH LOGIN'.CRLF);
echo fgets($connect,64);
fwrite($connect, base64_encode('[email protected]').CRLF);
echo fgets($connect,64);
fwrite($connect, base64_encode('xxxx').CRLF);
echo fgets($connect,64);
fwrite($connect, 'Mail From:<[email protected]>'.CRLF);
echo fgets($connect,64);
fwrite($connect, 'Rcpt To:<[email protected]'.CRLF);
echo fgets($connect,64);
fwrite($connect, 'DATA'.CRLF.CRLF);
echo fgets($connect,64);
fwrite($connect, 'SDFSFSDFSD'.CRLF);
echo fgets($connect,64);
fwrite($connect, '.'.CRLF);
echo fgets($connect,64);
fwrite($connect, 'quit'.CRLF);
echo fgets($connect,64);
你這樣試試8. PHP Mailer郵件發送失敗發送失敗! Mailer Error: SMTP connect() failed.
不使用SSL加密連接 //$mail->SMTPSecure = 'ssl'; 或更改一下策略,看是否被阻擋了。
126的埠號好像是 25 不是465吧?9. 如何通過php發送郵件php的mail函數不能用!
支持mail的伺服器 一般都是linux的 國內的好像不多
自己的電腦安裝mail伺服器不能往外發的 呵呵 可以自己測試用
現在很多管理系統都是用fsocketopen方式連接郵件伺服器並發送郵件的 可以使用163 126的郵箱 網上有一些模型的 就像是好多管理系統後台讓填入用戶名和密碼 就能群發一樣 如果你不介意的話 給你轉發一個以前我自己改過的可以利用fsocketopen方式群發或者單發email的一共三個文件
MailClass.php 》》》》》》
<?php
class Smtp
{
var $host; //主機
var $port; //埠 一般為25
var $user; //SMTP認證的帳號
var $pass; //認證密碼
var $debug = false; //是否顯示和伺服器會話信息?
var $conn;
var $result_str; //結果
var $in; //客戶機發送的命令
var $from; //收件人收到郵件顯示的源信箱
var $email; //真實的地址
var $to; //目標信箱
var $subject; //主題
var $body; //內容
var $error;
var $All;
function Smtp($array)
{
$this->host = $array['host'];
$this->port = $array['port'];
$this->email= $array['trueemail'];
$this->from = $array['from'];
$this->user = base64_encode($array['username']);
$this->pass = base64_encode($array['password']);
$this->debug = $array['debug'];
$this->socket = socket_create (AF_INET, SOCK_STREAM, SOL_TCP);
if($this->socket){
$this->result_str = "創建SOCKET:".socket_strerror(socket_last_error());
$this->debug_show($this->result_str);
}
else
die("初始化失敗,請檢查您的網路連接和參數");
$this->conn = socket_connect($this->socket,$this->host,$this->port);
if($this->conn){
$this->result_str = "創建SOCKET連接:".socket_strerror(socket_last_error());
$this->debug_show($this->result_str);
}
else
die("初始化失敗,請檢查您的網路連接和參數");
$this->result_str = "伺服器應答:<font color=#cc0000>".socket_read ($this->socket, 1024)."</font>";
$this->debug_show($this->result_str);
}
function debug_show($str)
{
if($this->debug)
{
echo $str."<p>\r\n";
}
}
function setmail($to,$subject,$body){
$this->to = $to;
$this->subject = $subject;
$this->body = $body;
$All ="Content-type:text/html;charset=gb2312\r\n"; //郵件的編碼方式可以根據自己的需要改
$All .= "From:".$this->from."\r\n";
$All .= "To:".$this->to."\r\n";
$All .= "Subject:".$this->subject."\r\n\r\n";
$All .= $this->body;
$this->All = $All;
}
/**
* 發送郵件部分
* 接收郵箱數組
*/
function send($toarray,$subject,$body)
{
//以下是和伺服器會話
$this->in = "EHLO HELO\r\n";
$this->docommand();
$this->in = "AUTH LOGIN\r\n";
$this->docommand();
$this->in = $this->user."\r\n";
$this->docommand();
$this->in = $this->pass."\r\n";
$this->docommand();
foreach( $toarray as $to ) {
$this -> setmail($to,$subject,$body);
$this->in = "RSET\r\n";
$this->docommand();
$this->in = "MAIL FROM:<".$this->email.">\r\n";
$this->docommand();
$this->in = "RCPT TO:<".$this->to.">\r\n";
$this->docommand();
$this->in = "DATA\r\n";
$this->docommand();
$this->in = $this->All."\r\n.\r\n";
$this->docommand();
}
$this->in = "QUIT\r\n";
$this->docommand();
//結束,關閉連接
}
function docommand()
{
socket_write ($this->socket, $this->in, strlen ($this->in));
$this->debug_show("Client Action:".$this->in);
$this->result_str = "Server:<font color=#cc0000>".socket_read ($this->socket, 1024)."</font>";
$this->debug_show($this->result_str);
}
}
?>
MailConfig.inc.php 》》》》》》
<?php
$mailconfig['host'] = "smtp.126.com"; //主機
$mailconfig['port'] = "25"; //埠 一般為25
$mailconfig['trueemail'] = "[email protected]"; //真實的地址
$mailconfig['username'] = "mhz1600"; //SMTP認證的帳號
$mailconfig['password'] = "*****"; //改成自己的
$mailconfig['debug'] = false; //是否顯示和伺服器會話信息?
$mailconfig['from'] = "[email protected]"; //顯示給用戶的發件人
include_once "MailClass.php";
set_time_limit(180);
?>
SendDemo.php 》》》》》》
<?php
include_once "MailConfig.inc.php";
//簡單的臨時碼驗證 當前時間(到小時)的驗證碼
//if( empty($_GET['s']) || $_GET['s'] != md5(date('Y-m-d-H',time())) ) {header("http/1.1 404"); die('');}
//發送email
if( isset($_POST['sendmail']) ) {
if( isset($_POST['from']) ) $mailconfig['from'] = $_POST['from'];
$smtp = new Smtp($mailconfig);
$title = $_POST['title'];
//獲取post的email正文
if( get_magic_quotes_gpc() ) $message = $_POST['message'];
else $message = addslashes($_POST['message']);
//從email列表/文檔中分離出所有的email地址
$pregstr = "@[a-zA-Z0-9\_][0-9a-zA-Z\.\-\_]+\@[0-aA-Za-z\-\_]+\.[0-9a-zA-Z\.\-\_]+@is";
$temp = array();
preg_match_all($pregstr,$_POST['emails'],$temp);
$toarray = $temp[0];
//var_mp($toarray);
$smtp->send($toarray,$title,$message);
die("操作完成!<A href=".$_SERVER['PHP_SELF']."?s=".md5(date('Y-m-d-H',time())).">繼續發送其他</a> <a href=# onclick=window.close()>關閉</a>");
}
else {
if( isset($_POST['emails']) ) {
if( is_array($_POST['emails']) )
$emails = implode("\t",$_POST['emails']);
else
$emails = $_POST['emails'];
}
else $emails = "";
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"><style type="text/css">
<!--
body,td,th {
font-size: 12px;
}
-->
</style></head>
<body>
<form id="form1" name="form1" method="post" action="">
<table width="600" border="1" align="center" cellpadding="3" cellspacing="0" bordercolordark="#FFFFFF" bordercolorlight="#eeeeee">
<tr>
<td width="66">發件人:</td>
<td width="516"><input name="from" type="text" value="<?php echo $mailconfig['from']; ?>"> 可以直接修改mailconfig文件中的email</td>
</tr>
<tr>
<td>郵件標題:</td>
<td><input name="title" type="text" value="郵件群發測試標題!" size="60"></td>
</tr>
<tr>
<td>收件人:<br></td>
<td><textarea name="emails" cols="60" rows="5"><?php echo $emails; ?></textarea></td>
</tr>
<tr>
<td>郵件正文:<br>
【html】</td>
<td><textarea name="message" cols="60" rows="10">郵件群發測試!謝謝~!</textarea></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="sendmail" value=" 發送郵件 "> </td>
</tr>
</table>
</form>
<?
}
?>
</body>
</html>
使用方式 運行senddemo.php就行 確定本地或者伺服器開啟了fsocketopen支持 在輸入框可以多種格式的的輸入很多email 程序用正則表達式匹配出所有的email地址 通過伺服器循環對話的方式不斷的發送郵件 看看那個demo的流程就明白了
【鄭重聲明:mailclass修改自網上的模型 其他本人原創,版權不究 歡迎分享】
+---------------------廣告-------------------------+
那一天:回憶,讓生活更美好
獨享人生中那個特別的日子,記錄從那一天開始的幸福
http://www.nayitian.net
期待您的加入,歡迎提供寶貴的意見建議
+--------------------------------------------------+
+--------------------補充--------------------+
發送郵件的伺服器(smtp)並不是網址 126發送郵件的伺服器是 smtp.126.com 網易163的發送郵件伺服器是 smtp.163.com 所有郵箱對於這個都有說明的 還有一個就是能夠使用這個功能的好象新注冊的郵箱不太好用 因為網易在2006年10對郵箱進行過調整 在此之前注冊的都沒問題 在這之後注冊的好像開通一些其他的功能並且使用了一段時間才行的
smtp伺服器的鏈接可以在命令提示行下測試 就是使用上面的命令:
首先 telnet smtp.126.com 25
因為smtp使用的25埠提供服務的 然後就會看到
220 126.com Anti-spam GT for Coremail System (126com[071018])
輸入 EHLO HELO
伺服器返回
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 8BITMIME
輸入 AUTH LOGIN
伺服器返回
334 dXNlcm5hbWU6
然後再輸入通過base64加密的用戶名和密碼 就能通過命令來和伺服器對話 包括發送郵件等功能
具體的如果有興趣更多命令自己查一下
這個php的程序就是模擬這個功能來實現的
如果你用telnet直接連不上的話 說明伺服器是錯誤的 。。