1、重裝系統後寬頻連接錯誤553
您好,請檢查一下本身伺服器的HELO信息,後面是否是一個完整的域名,HELO信息如果不完整,也就無法給我們的郵箱發郵件。系統返回信息和伺服器基本設置HELO信息幫助:
1.為什麼新浪伺服器會產生553的退信信息?
這是由於郵件發送方伺服器的HELO域設置不規范造成的。如果新浪伺服器無法對該域進行正確的DNS解析, 將會導致新浪反垃圾系統認為該伺服器是垃圾郵件發送者從而拒收. 不規范的HELO域的示例如下:
HELO office
HELO mailserver
HELO localhost.localdomain
解決方法: 參考本文檔後半部分提供的設置方法,正確設置貴方SMTP伺服器的HELO域, 使新浪能過對該域名進行正確的DNS解析
2.SMTP伺服器能否設置為公司內網的域名?
請設置貴公司的伺服器對外發送的HELO域為正確的貴公司域名,否則將因為和第一條同樣的原因造成新浪拒收。
3.SMTP伺服器的HELO域已設置正確,怎麼還產生553的退信信息?
這是由於發郵件伺服器在內網的某個網段中。如果郵件經防火牆發送, 而防火牆沒有對郵件的源IP地址進行映射, 新浪的伺服器就會認為防火牆的IP是發件方SMTP伺服器的IP地址,而郵件源IP地址與HELO域名MX解析不一致. 這種情況也會使新浪拒收郵件。解決方法: 使HELO後面的域名MX解析為防火牆的IP地址, 或者使防火牆把經過它的郵件的IP映射為其真正的IP地址, 即不要改變郵件的源IP地址.
4.SMTP伺服器的HELO域能否包含特殊字元?
不可以。如果發郵件伺服器的HELO域中包含有無法識別的字元, 就會導致新浪對其DNS解析失敗, 從而拒絕接收其郵件.
包含有無法識別字元的HELO域示例: eev?bj?md02.vatech
5.國外網站應如何正確設置SMTP伺服器?
新浪要求所有中國大陸境外的CMTP伺服器必須提供反向DNS解析。對於中國境外的CMTP伺服器,如果不提供反向DNS解析,新浪將認為該伺服器為垃圾郵件發送者的伺服器並拒收該地址發來的郵件。
解決方法: 注冊SMTP伺服器公網IP地址的RDNS服務, 並把它對應的域名寫到伺服器的HELO域中.
6.MS Exchange2000伺服器HELO域的設置方法
具體位置在: SERVER---主名---SMTP---DEFAULT SMTP VIRTUAL---屬性---DELIVERY---ADVANCED---MASQUERADE NAME
7.Notes伺服器HELO域的設置方法
具體位置在:伺服器---基本---全限定的Internet主機名
2、什麼是SMTP協議
SMTP被用來在網際網路上傳遞電子郵件。文件RFC821規定了該協議的所有細節。但是你只須記住下面的內容--該協議的基本命令和方法就行了。
協議的原理很簡單。無非是一個客戶端計算機向伺服器發送命令,然後伺服器向客戶端計算機返回一些信息。客房端發送的命令以及伺服器的回應都是字元串,你並不需要特別的軟體就能讀出它們。如果你仔細看過WinsockTerminal示常式序的源代碼,你就會發現這一點。現在讓我們用這個示常式序來向自己發一封電子郵件吧。
運行示常式序,單擊"Connect"按鈕,在"Connectto..."對話框中輸入你的電子郵件伺服器的地址,選擇SMTP選項。最後按"Connect"按鈕。如果連接成功,Winsock控制項會產生Connected事件,在狀態欄中也可看到連接成功的信息。在主文本窗口中你將看到從伺服器返回的文本。該文本包含一個三位數的代碼及描述,例如:
220-ns.cinfo.ruSendmail8.6.12/8.6.9readyatWed,22Apr199822:54:41+0300
220ESMTPspokenhere
不必太過留意這些描述。因為這些描述可能會因伺服器而異。你只須要知道代碼所代表的意思就行了。代碼220表示成功建立連接,伺服器等待你的第一個命令。
向伺服器傳遞的第一個命令是HELO.該命令包含一個參數,即你的郵箱名。
HELOoleg
注意:在RFC821中,HELO是一個可選擇性命令,如果伺服器不要求該命令的話,你可以把它忽略掉。
如果命令成功,伺服器會返回一個代碼為250的回應。下一步用MAILFROM命令告訴伺服器你想發一封郵件。該命令以發信人的郵件地址為參數。
MAILFROM:[email protected]
發完命令後,如果伺服器返回一個代碼為250回應,你就可以向伺服器發送RCPTTO命令了。該命令以收信人地址為參數,一看便知是告訴伺服器你想將郵件發到收信人地址處。
RCPTTO:[email protected]
如果你想將郵件發給多個收件人的話。你需要多次使用RCPTTO命令,對每個命令,伺服器都會返回代碼為250的回應。
現在你可以向伺服器發送郵件正文了。用DATA命令告訴伺服器以下的內容為郵件正文。在你從伺服器收到代碼為354的回應後,你就可以發送郵件正文了。郵件按行發送,每行郵件以一個無回車的換行符結束(在VB中就是vbLf)示常式序知道何時使用換行符,何時使用回車加換行符。所以你只須按回車鍵就行了。下面是一個例子:
Subject:Myfirste-mailmessage.
Firstlineofamessage.
Secondline.
.
注意上面最後一行的最後一個字元是一個小數點。這是正文結束的標志。用VB代碼表示就是vbLf&"."&vbCrLf.伺服器收到這個標志後,就會立即向你返回一個代碼為250的回應以及該郵件的唯一ID號。任務完成了,你可以繼續發送下封郵件,也可以斷開同伺服器的連接。如果要斷開同伺服器的連接就用QUIT命令。在這種情況下,伺服器會返回一個代碼為221的回應並斷開連接。
QUIT
3、怎麼阻止HELO為某個域的SMTP連接
SECURITY】-【IP
SHIELDING】應該是不行的它只能限制發件人@後面的域名只能來自某個IP而現在它每次發件人的郵址都是來自不同的域名但它有個特點就是每次的HELO域名都不變
4、請問如何用python將某個郵箱未讀郵件全部轉發到另一個郵箱?
首先了解SMTP(簡單郵件傳輸協議),郵件傳送代理程序使用SMTP協議來發送電郵到接收者的郵件伺服器。SMTP協議只能用來發送郵件,不能用來接收郵件,而大多數的郵件發送伺服器都是使用SMTP協議。SMTP協議的默認TCP埠號是25。
本文主要介紹利用'smtplib','email'兩個模塊來實現郵件的發送,可以如下查看兩個模塊的函數和方法:
smtplib模塊簡介:
smtplib.SMTP([host[, port[, local_hostname[, timeout]]]])
此為SMTP類構造函數,表示與SMTP伺服器之間的連接,並根據這個連接向smtp伺服器發送指令,執行相關操作(如:登陸、發送郵件),且每個參數都是可選的。
其中最重要的參數:
host:smtp伺服器主機名
port:smtp服務的埠,默認是25;
如果在創建SMTP對象的時候提供了這兩個參數,在初始化的時候會自動調用connect方法去連接伺服器。
smtplib.SMTP還提供了如下方法:
SMTP.set_debuglevel(level):設置是否為調試模式
SMTP.connect([host[, port]]):連接到指定的smtp伺服器。參數分別表示 smpt主機和埠。
SMTP.docmd(cmd[, argstring]):向smtp伺服器發送指令。
SMTP.helo([hostname]) :使用"helo"指令向伺服器確認身份。
SMTP.login(user, password):登陸到smtp伺服器。現在幾乎所有smtp伺服器,都必須在驗證用戶信息合法之後才允許發送郵件。(重要!)
SMTP.sendmail(from_addr,to_addrs,msg[,mail_options,rcpt_options]):發送郵件。這里要注意一下第三個參數,msg是字元串,表示郵件。我們知道郵件一般由標題,發信人,收件人,郵件內容,附件等構成,發送郵件的時候,要注意msg的格式。這個格式就是smtp協議中定義的格式。SMTP.quit() :斷開與smtp伺服器的連接,相當於發送"quit"指令。(重要!)
常用的函數方法:
email模塊
1.class email.message.Message
__getitem__,__setitem__實現obj[key]形式的訪問。
Msg.attach(playload): 向當前Msg添加playload。
Msg.set_playload(playload):
Msg.add_header(_name, _value, **_params): 添加郵件頭欄位。
2.class email.mime.base.MIMEBase(_maintype, _subtype, **_params)
所有MIME類的基類,是email.message.Message類的子類。
3.class email.mime.multipart.MIMEMultipart()
在3.0版本的email模塊 (Python 2.3-Python 2.5) 中,這個類位於email.MIMEMultipart.MIMEMult ipart。這個類是MIMEBase的直接子類,用來生成包含多個部分的郵件體的MIME對象。
4.class email.mime.text.MIMEText(_text)
使用字元串_text來生成MIME對象的主體文本。
獲得所需要使用的郵箱的host地址和port埠號,(本文使用的是163郵箱,對應的smtp伺服器地址:mail.163.com,埠號25)
常用郵箱的smtp伺服器地址和埠號如圖:
編寫程序如下:
#! /usr/bin/env python
import smtpli
from email.mime.text import MIMEText
mailto_list=['[email protected]'] #收件人(列表)
mail_host="smtp.163.com" #使用的郵箱的smtp伺服器地址
mail_user="name" #用戶名
mail_pass="pwd" #密碼
mail_postfix="postfix" #郵箱的後綴
def send_mail(to_list,sub,content):
me="hello"+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEText(content,_subtype='plain')
msg['Subject'] = sub
msg['From'] = me
msg['To'] = ";".join(to_list) #將收件人列表以『;』分隔
try:
server = smtplib.SMTP()
server.connect(mail_host) #連接伺服器
server.login(mail_user,mail_pass) #登錄操作
server.sendmail(me, to_list, msg.as_string())
server.close()
return True
except Exception, e:
print str(e)
return False
for i in range(5): #發送五封,不過會被攔截的。。。
if send_mail(mailto_list,"hello","haha!"): #郵件主題和郵件內容
print "done!"
else:
print "failed!"
最後,可以運行編寫的py文件,可以得到如圖所是的結果,代表郵件發送成功。
這樣,就能成功實現用Python發送郵件啦!
5、我想用smtp發郵件,建立連接後發送"HELO sss"後,沒有反應,用java寫的程序,求救
你確定不需要使用用戶名和密碼?
你不如下個java的mail包(不包含在jdk在官網有),或者直接使用apache common的mail包試試
6、exchange2003如何拒絕HELO命令
我看出來,你想禁用SMTP VERBS,這需要修改ADSIEdit 在 Active Directory 中的 值。
要修改此值通過 ADSIEdit:
1.打開 ADSIEdit 並連接到域控制器。
2.打開配置容器。
3.導航到以下位置:
配置 / 服務 / Microsoft Exchange / < 您的組織 > / 管理組 / < 您的管理組 > /Servers/ < Exchange Server > / 協議 / SMTP < 您的虛擬伺服器編號 >
4.右鍵單擊該虛擬伺服器對象,然後單擊 屬性 。
5.選擇要查看的屬性: 選擇 。
6.在該 編輯屬性: 欄位中,輸入要為其設置的值。
注意 : 此值基於表中的值匯總。
7.單擊 設置 , 應用 ,然後單擊 確定 。
8.退出 ADSIEdit。
我錯了,這個我試了一下,並不能回復221.。。
7、PHP中發送郵件的代碼!
從代碼來看,想必樓主是想把表單提交的內容發送至指定郵箱,而這個郵箱地址也是在表單中填寫的,$sendTo變數的值被賦為表單項「toMail」傳過來的值。
如此,你可以在填寫表單的時候在toMail表單項里填入「[email protected]」,或者直接$sendTo="[email protected]"。
接下來就要考慮是否能發送出去了:
1、如果樓主配置的伺服器安裝了sendmail組件,就可以直接使用你寫的這段代碼來完成任務。
2、如果沒有安裝sendmail組件,就要接用smtp伺服器來發送了。這樣相對較復雜,要引用一個PHP類。具體代碼如下:
SMTP.PHP:
<?php
class smtp
{
/* Public Variables */
var $smtp_port;
var $time_out;
var $host_name;
var $log_file;
var $relay_host;
var $debug;
var $auth;
var $user;
var $pass;
/* Private Variables */
var $sock;
/* Constractor */
function smtp($relay_host = "", $smtp_port = 25,$auth = false,$user,$pass)
{
$this->debug = FALSE;
$this->smtp_port = $smtp_port;
$this->relay_host = $relay_host;
$this->time_out = 30; //is used in fsockopen()
#
$this->auth = $auth;//auth
$this->user = $user;
$this->pass = $pass;
#
$this->host_name = "localhost"; //is used in HELO command
$this->log_file = "";
$this->sock = FALSE;
}
/* Main Function */
function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "")
{
$mail_from = $this->get_address($this->strip_comment($from));
$body = ereg_replace("(^|(\r\n))(\.)", "\1.\3", $body);
$header = "MIME-Version:1.0\r\n";
if($mailtype=="HTML")
{
$header .= "Content-Type:text/html\r\n";
}
$header .= "To: ".$to."\r\n";
if ($cc != "")
{
$header .= "Cc: ".$cc."\r\n";
}
$header .= "From: $from<".$from.">\r\n";
$header .= "Subject: ".$subject."\r\n";
$header .= $additional_headers;
$header .= "Date: ".date("r")."\r\n";
$header .= "X-Mailer:By Redhat (PHP/".phpversion().")\r\n";
list($msec, $sec) = explode(" ", microtime());
$header .= "Message-ID: <".date("YmdHis", $sec).".".($msec*1000000).".".$mail_from.">\r\n";
$TO = explode(",", $this->strip_comment($to));
if ($cc != "")
{
$TO = array_merge($TO, explode(",", $this->strip_comment($cc)));
}
if ($bcc != "")
{
$TO = array_merge($TO, explode(",", $this->strip_comment($bcc)));
}
$sent = TRUE;
foreach ($TO as $rcpt_to)
{
$rcpt_to = $this->get_address($rcpt_to);
if (!$this->smtp_sockopen($rcpt_to))
{
$this->log_write("Error: Cannot send email to ".$rcpt_to."\n");
$sent = FALSE;
continue;
}
if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body))
{
$this->log_write("E-mail has been sent to <".$rcpt_to.">\n");
}
else
{
$this->log_write("Error: Cannot send email to <".$rcpt_to.">\n");
$sent = FALSE;
}
fclose($this->sock);
$this->log_write("Disconnected from remote host\n");
}
return $sent;
}
/* Private Functions */
function smtp_send($helo, $from, $to, $header, $body = "")
{
if (!$this->smtp_putcmd("HELO", $helo))
{
return $this->smtp_error("sending HELO command");
}
#auth
if($this->auth)
{
if (!$this->smtp_putcmd("AUTH LOGIN", base64_encode($this->user)))
{
return $this->smtp_error("sending HELO command");
}
if (!$this->smtp_putcmd("", base64_encode($this->pass)))
{
return $this->smtp_error("sending HELO command");
}
}
#
if (!$this->smtp_putcmd("MAIL", "FROM:<".$from.">"))
{
return $this->smtp_error("sending MAIL FROM command");
}
if (!$this->smtp_putcmd("RCPT", "TO:<".$to.">"))
{
return $this->smtp_error("sending RCPT TO command");
}
if (!$this->smtp_putcmd("DATA"))
{
return $this->smtp_error("sending DATA command");
}
if (!$this->smtp_message($header, $body))
{
return $this->smtp_error("sending message");
}
if (!$this->smtp_eom())
{
return $this->smtp_error("sending <CR><LF>.<CR><LF> [EOM]");
}
if (!$this->smtp_putcmd("QUIT"))
{
return $this->smtp_error("sending QUIT command");
}
return TRUE;
}
function smtp_sockopen($address)
{
if ($this->relay_host == "")
{
return $this->smtp_sockopen_mx($address);
}
else
{
return $this->smtp_sockopen_relay();
}
}
function smtp_sockopen_relay()
{
$this->log_write("Trying to ".$this->relay_host.":".$this->smtp_port."\n");
$this->sock = @fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out);
if (!($this->sock && $this->smtp_ok()))
{
$this->log_write("Error: Cannot connenct to relay host ".$this->relay_host."\n");
$this->log_write("Error: ".$errstr." (".$errno.")\n");
return FALSE;
}
$this->log_write("Connected to relay host ".$this->relay_host."\n");
return TRUE;
}
function smtp_sockopen_mx($address)
{
$domain = ereg_replace("^.+@([^@]+)$", "\1", $address);
if (!@getmxrr($domain, $MXHOSTS))
{
$this->log_write("Error: Cannot resolve MX \"".$domain."\"\n");
return FALSE;
}
foreach ($MXHOSTS as $host)
{
$this->log_write("Trying to ".$host.":".$this->smtp_port."\n");
$this->sock = @fsockopen($host, $this->smtp_port, $errno, $errstr, $this->time_out);
if (!($this->sock && $this->smtp_ok()))
{
$this->log_write("Warning: Cannot connect to mx host ".$host."\n");
$this->log_write("Error: ".$errstr." (".$errno.")\n");
continue;
}
$this->log_write("Connected to mx host ".$host."\n");
return TRUE;
}
$this->log_write("Error: Cannot connect to any mx hosts (".implode(", ", $MXHOSTS).")\n");
return FALSE;
}
function smtp_message($header, $body)
{
fputs($this->sock, $header."\r\n".$body);
$this->smtp_debug("> ".str_replace("\r\n", "\n"."> ", $header."\n> ".$body."\n> "));
return TRUE;
}
function smtp_eom()
{
fputs($this->sock, "\r\n.\r\n");
$this->smtp_debug(". [EOM]\n");
return $this->smtp_ok();
}
function smtp_ok()
{
$response = str_replace("\r\n", "", fgets($this->sock, 512));
$this->smtp_debug($response."\n");
if (!ereg("^[23]", $response))
{
fputs($this->sock, "QUIT\r\n");
fgets($this->sock, 512);
$this->log_write("Error: Remote host returned \"".$response."\"\n");
return FALSE;
}
return TRUE;
}
function smtp_putcmd($cmd, $arg = "")
{
if ($arg != "")
{
if($cmd=="")
$cmd = $arg;
else
$cmd = $cmd." ".$arg;
}
fputs($this->sock, $cmd."\r\n");
$this->smtp_debug("> ".$cmd."\n");
return $this->smtp_ok();
}
function smtp_error($string)
{
$this->log_write("Error: Error occurred while ".$string.".\n");
return FALSE;
}
function log_write($message)
{
$this->smtp_debug($message);
if ($this->log_file == "")
{
return TRUE;
}
$message = date("M d H:i:s ").get_current_user()."[".getmypid()."]: ".$message;
if (!@file_exists($this->log_file) || !($fp = @fopen($this->log_file, "a")))
{
$this->smtp_debug("Warning: Cannot open log file \"".$this->log_file."\"\n");
return FALSE;
}
flock($fp, LOCK_EX);
fputs($fp, $message);
fclose($fp);
return TRUE;
}
function strip_comment($address)
{
$comment = "\([^()]*\)";
while (ereg($comment, $address))
{
$address = ereg_replace($comment, "", $address);
}
return $address;
}
function get_address($address)
{
$address = ereg_replace("([ \t\r\n])+", "", $address);
$address = ereg_replace("^.*<(.+)>.*$", "\1", $address);
return $address;
}
function smtp_debug($message)
{
if ($this->debug)
{
echo $message;
}
}
}
?>
DEMO:TEST.PHP
<?php
require "smtp.php";
$smtpserver = "smtp.xxx.com";//SMTP伺服器
$smtpserverport =25;//SMTP伺服器埠
$smtpusermail = "[email protected]";//SMTP伺服器的用戶郵箱
$smtpemailto = "[email protected]";//發送給誰
$smtpuser = "xxxx";//SMTP伺服器的用戶帳號
$smtppass = "xxxx";//SMTP伺服器的用戶密碼
$mailsubject = "客戶反饋意見!";//郵件主題
$mailbody = "<h1>這是我的一個測試~~~</h1>";//郵件內容
$mailtype = "HTML";//郵件格式(HTML/TXT),TXT為文本郵件
$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//這裡面的一個true是表示使用身份驗證,否則不使用身份驗證.
$smtp->debug = false;//是否顯示發送的調試信息
$return = ($smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype));
echo $return;
?>
8、協議: SMTP, 伺服器響應: '554 refused 'helo'/'ehlo' because hostname(workgroua19f93)
這個提示是伺服器給你的回信,意思是說對方收件伺服器拒絕你了你的郵件,所以被退回了。你可以聯系一下對方郵件伺服器的管理員查看一下日誌看看究竟是什麼原因導致你的郵件被拒收了,可能原因是某些過濾規則。
9、PHP 向郵箱發數據
類:smtp.php
<?php
class smtp
{
/* Public Variables */
var $smtp_port;
var $time_out;
var $host_name;
var $log_file;
var $relay_host;
var $debug;
var $auth;
var $user;
var $pass;
/* Private Variables */
var $sock;
/* Constractor */
function smtp($relay_host = "", $smtp_port = 25,$auth = false,$user,$pass)
{
$this->debug = FALSE;
$this->smtp_port = $smtp_port;
$this->relay_host = $relay_host;
$this->time_out = 30; //is used in fsockopen()
$this->auth = $auth;//auth
$this->user = $user;
$this->pass = $pass;
$this->host_name = "localhost"; //is used in HELO command
$this->log_file = "";
$this->sock = FALSE;
}
/* Main Function */
function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "")
{
$mail_from = $this->get_address($this->strip_comment($from));
$body = ereg_replace("(^|(\r\n))(\.)", "\1.\3", $body);
$header .= "MIME-Version:1.0\r\n";
if($mailtype=="HTML")
{
$header .= "Content-Type:text/html\r\n";
}
$header .= "To: ".$to."\r\n";
if ($cc != "")
{
$header .= "Cc: ".$cc."\r\n";
}
$header .= "From: $from<".$from.">\r\n";
$header .= "Subject: ".$subject."\r\n";
$header .= $additional_headers;
$header .= "Date: ".date("r")."\r\n";
$header .= "X-Mailer:By Redhat (PHP/".phpversion().")\r\n";
list($msec, $sec) = explode(" ", microtime());
$header .= "Message-ID: <".date("YmdHis", $sec).".".($msec*1000000).".".$mail_from.">\r\n";
$TO = explode(",", $this->strip_comment($to));
if ($cc != "")
{
$TO = array_merge($TO, explode(",", $this->strip_comment($cc)));
}
if ($bcc != "")
{
$TO = array_merge($TO, explode(",", $this->strip_comment($bcc)));
}
$sent = TRUE;
foreach ($TO as $rcpt_to)
{
$rcpt_to = $this->get_address($rcpt_to);
if (!$this->smtp_sockopen($rcpt_to))
{
$this->log_write("Error: Cannot send email to ".$rcpt_to."\n");
$sent = FALSE;
continue;
}
if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body))
{
$this->log_write("E-mail has been sent to <".$rcpt_to.">\n");
}
else
{
$this->log_write("Error: Cannot send email to <".$rcpt_to.">\n");
$sent = FALSE;
}
fclose($this->sock);
$this->log_write("Disconnected from remote host\n");
}
return $sent;
}
/* Private Functions */
function smtp_send($helo, $from, $to, $header, $body = "")
{
if (!$this->smtp_putcmd("HELO", $helo))
{
return $this->smtp_error("sending HELO command");
}
#auth
if($this->auth)
{
if (!$this->smtp_putcmd("AUTH LOGIN", base64_encode($this->user)))
{
return $this->smtp_error("sending HELO command");
}
if (!$this->smtp_putcmd("", base64_encode($this->pass)))
{
return $this->smtp_error("sending HELO command");
}
}
if (!$this->smtp_putcmd("MAIL", "FROM:<".$from.">"))
{
return $this->smtp_error("sending MAIL FROM command");
}
if (!$this->smtp_putcmd("RCPT", "TO:<".$to.">"))
{
return $this->smtp_error("sending RCPT TO command");
}
if (!$this->smtp_putcmd("DATA"))
{
return $this->smtp_error("sending DATA command");
}
if (!$this->smtp_message($header, $body))
{
return $this->smtp_error("sending message");
}
if (!$this->smtp_eom())
{
return $this->smtp_error("sending <CR><LF>.<CR><LF> [EOM]");
}
if (!$this->smtp_putcmd("QUIT"))
{
return $this->smtp_error("sending QUIT command");
}
return TRUE;
}
function smtp_sockopen($address)
{
if ($this->relay_host == "")
{
return $this->smtp_sockopen_mx($address);
}
else
{
return $this->smtp_sockopen_relay();
}
}
function smtp_sockopen_relay()
{
$this->log_write("Trying to ".$this->relay_host.":".$this->smtp_port."\n");
$this->sock = @fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out);
if (!($this->sock && $this->smtp_ok()))
{
$this->log_write("Error: Cannot connenct to relay host ".$this->relay_host."\n");
$this->log_write("Error: ".$errstr." (".$errno.")\n");
return FALSE;
}
$this->log_write("Connected to relay host ".$this->relay_host."\n");
return TRUE;;
}
function smtp_sockopen_mx($address)
{
$domain = ereg_replace("", "\1", $address);
if (, $MXHOSTS))
{
$this->log_write("Error: Cannot resolve MX \"".$domain."\"\n");
return FALSE;
}
foreach ($MXHOSTS as $host)
{
$this->log_write("Trying to ".$host.":".$this->smtp_port."\n");
$this->sock = @fsockopen($host, $this->smtp_port, $errno, $errstr, $this->time_out);
if (!($this->sock && $this->smtp_ok()))
{
$this->log_write("Warning: Cannot connect to mx host ".$host."\n");
$this->log_write("Error: ".$errstr." (".$errno.")\n");
continue;
}
$this->log_write("Connected to mx host ".$host."\n");
return TRUE;
}
$this->log_write("Error: Cannot connect to any mx hosts (".implode(", ", $MXHOSTS).")\n");
return FALSE;
}
function smtp_message($header, $body)
{
fputs($this->sock, $header."\r\n".$body);
$this->smtp_debug("> ".str_replace("\r\n", "\n"."> ", $header."\n> ".$body."\n> "));
return TRUE;
}
function smtp_eom()
{
fputs($this->sock, "\r\n.\r\n");
$this->smtp_debug(". [EOM]\n");
return $this->smtp_ok();
}
function smtp_ok()
{
$response = str_replace("\r\n", "", fgets($this->sock, 512));
$this->smtp_debug($response."\n");
if (!ereg("^[23]", $response))
{
fputs($this->sock, "QUIT\r\n");
fgets($this->sock, 512);
$this->log_write("Error: Remote host returned \"".$response."\"\n");
return FALSE;
}
return TRUE;
}
function smtp_putcmd($cmd, $arg = "")
{
if ($arg != "")
{
if($cmd=="")
{
$cmd = $arg;
}
else
{
$cmd = $cmd." ".$arg;
}
}
fputs($this->sock, $cmd."\r\n");
$this->smtp_debug("> ".$cmd."\n");
return $this->smtp_ok();
}
function smtp_error($string)
{
$this->log_write("Error: Error occurred while ".$string.".\n");
return FALSE;
}
function log_write($message)
{
$this->smtp_debug($message);
if ($this->log_file == "")
{
return TRUE;
}
$message = date("M d H:i:s ").get_current_user()."[".getmypid()."]: ".$message;
if () || !($fp = @fopen($this->log_file, "a")))
{
$this->smtp_debug("Warning: Cannot open log file \"".$this->log_file."\"\n");
return FALSE;;
}
flock($fp, LOCK_EX);
fputs($fp, $message);
fclose($fp);
return TRUE;
}
function strip_comment($address)
{
$comment = "\([^()]*\)";
while (ereg($comment, $address))
{
$address = ereg_replace($comment, "", $address);
}
return $address;
}
function get_address($address)
{
$address = ereg_replace("([ \t\r\n])+", "", $address);
$address = ereg_replace("^.*<(.+)>.*$", "\1", $address);
return $address;
}
function smtp_debug($message)
{
if ($this->debug)
{
echo $message;
}
}
}
?>
<?php
/*
這是一個測試程序!!!
*/
require("smtp.php");
##########################################
$smtpserver = "smtp.126.com";//SMTP伺服器
$smtpserverport = 25;//SMTP伺服器埠
$smtpusermail = "伺服器的用戶郵箱
$smtpemailto = "發送給誰
$smtpuser = "";//SMTP伺服器的用戶帳號
$smtppass = "";//SMTP伺服器的用戶密碼
$mailsubject = "中文";//郵件主題
$mailbody = "<h1>中文</h1>";//郵件內容
$mailtype = "HTML";//郵件格式(HTML/TXT),TXT為文本郵件
##########################################
$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//這裡面的一個true是表示使用身份驗證,否則不使用身份驗證.
$smtp->debug = TRUE;//是否顯示發送的調試信息
$smtp->sendmail($smtpemailto, $smtpusermail, $mailsubject, $mailbody, $mailtype);
?>
10、搭建red hat 5.0的postfix郵件伺服器時,在smtp發送郵件測試的時候就HELO卡住了??!
是ehlo吧!對postfix的測試設置
[root@localhost ~]# telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 mail.vbird.tsai ESMTP Postfix
ehlo vbird.tsai
250-mail.vbird.tsai
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
vrfy ethnicity
252 2.0.0 ethnicity
quit
221 2.0.0 Bye
Connection closed by foreign host.