顯示具有 SMTP 標籤的文章。 顯示所有文章
顯示具有 SMTP 標籤的文章。 顯示所有文章

2012年10月7日 星期日

Database Mail的錯誤:5.5.1 SMTP AUTH is required.

        有天一早到公司竟發現我所有SQL Server上的作業幾乎都失敗了,真是嚇到我了,查看作業的歷程紀錄,發現都是失敗在發送信件的元件那裏,印象中公司用的Exchange前一陣子有升級,但怎麼會突然無法發送郵件呢?

        一開始我先用簡單的VBS在Server上發測試信看看,結果可以成功寄信!接著我測試SSIS封裝裡用VB.NET寫的發信程式,結果會拋錯,再接著我用Database Mail試試,結果收不到信,Database Mail紀錄有出現錯誤訊息,如下圖


2010年10月31日 星期日

550 5.7.1 Unable to relay(第二種情況)

最近收到一封NDR(投遞不成功的報告),信件內容裡[系統管理員的診斷資訊]如下

#< #5.7.1 smtp;550 5.7.1 Unable to relay> #SMTP#
這錯誤好熟悉啊,之前我有遇過,我的這篇550 5.7.1 unable to relay有說明,不過這次寄信的程式是利用本機SMTP服務來寄信的,而且已正常運行很久了,突然出現這錯誤我感到很訝異,難道設定不小心被人動到了嗎?仔細研究後發現,這錯誤跟之前遇到的狀況不一樣,特此紀錄

2010年4月25日 星期日

530 5.7.1 Client was not authenticated

  最近收到來自一台測試機寄來的NDR副本,錯誤訊息為530 5.7.1 Client was not authenticated,因為那台測試機上面裝有SMTP服務,所以很直覺的認為是SMTP服務問題,然後測試了一下,發現同樣的程式,一下可以寄信,一下不能寄信,很詭異吧,明明沒收到信,有時收的到NDR,有時候又收不到,超怪的,怪到我都懷疑自己對SMTP是不是完全不懂了,經過幾天的測試研究,終於找到問題了,特此紀錄
  首先我看了一下SMTP的設定,沒什特別的啊,我沒動,比對一下另一台專門發信機器的設定,沒什不一樣的,不過那台在DMZ,網路環境不一樣可能不准,這時想到有時出問題,移除重裝一下就會好,於是我又重裝SMTP,結果還是一樣,時好時壞,於是我又再另外一台電腦上裝SMTP與POP3,透過測試機的SMTP發到新裝的這台,再去新裝的這台收信,皆正常,不會有一下收的到,一下收不到的問題
  看來不像是SMTP服務的問題,只好去看SMTP的log啦,終於看到奇怪的地方啦,以下是寄不出去信的log,我只擷取需要的部分

2010年1月9日 星期六

Telnet、SMTP Log與Mail Header

最近遇到很多郵件傳輸的問題,但是因自己本身無法接觸到Exchange,所以想說去了解一下SMTP Services好了,反正寄信的基本功能應該不會差太遠吧。
有時候看一些Services,有LOG看才知道到底有沒有在運作,也比較清楚它作了什麼,但是一開始看SMTP的LOG,我可是愈看愈模糊啊,原來是我沒把全部的LOG資訊都啟用,所以建議啟用全部的LOG紀錄吧,尤其是擴充內容喔。

首先,參考微軟的使用 SMTP 來傳送外送訊息,裡面有提到SMTP 如何運作?我就不多做說明了,自己去看吧。

2009年12月26日 星期六

了解Email Headers所代表的意義

我是從Reading Email Headers 這邊看到的,解說的很詳盡,我稍微把我理解的寫出來,看不懂我寫的人,只能說抱歉囉,我表達能力不好,建議各位還是去看原文吧

一般的郵件傳輸的過程至少經過4台電腦,怎麼說呢,當使用者發送郵件,會在使用者自己的電腦上產出訊息,然後訊息會先送到你指定寄件用的Mail Server(可能是你ISP用的或公司的),此時使用者的電腦已完成它的發送工作,但是Mail Server還沒完成他的工作,他會幫你找到收件者的Mail Server,跟她溝通然後將訊息傳送給她才算完成,這訊息會待在第二台Mail Server上,直到收件者讀取該訊息,將訊息下載到收件者的電腦後刪除,整個流程大概是這樣。

2009年7月3日 星期五

啟用IIS6隔離模式對CDO.Message的影響

因為不明的原因造成IIS6常常重啟,不得已只好開啟隔離模式(用 IIS 5.0 隔離模式執行 WWW 服務),結果奇怪的事發生了,原本ASP可以發送mail的,突然不能發送,還有錯誤訊息,把隔離模式取消,就可以發送了,很怪吧(CDONTS也一樣,可參考我另一篇)

程式如下


Set objEmail = CreateObject("CDO.Message")
objEmail.From = "寄件者"
objEmail.To = "收件者"
objEmail.Subject = "CDO.Message test"
objEmail.Textbody = "test"
objEmail.Send
Response.write "使用CDO.Message發信成功"

錯誤訊息


CDO.Message.1 錯誤 '80040220'
"SendUsing" (?C°e‥I¥I) 3]cw-EμLRA!C
/mis331.asp, 列8
解決辦法

objEmail.Send 前,加入下列四行即可
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
"localhost"
objEmail.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update

2009年7月2日 星期四

啟用IIS6隔離模式對CDONTS.NewMail的影響

先說win2003預設已不支援CDONTS.NewMail了,建議是用CDO.Message囉,但若還是堅持要用,請自行從別台機器拷貝cdonts.dll然後再註冊就可使用!

因為不明的原因造成IIS6常常重啟,不得已只好開啟隔離模式(用 IIS 5.0 隔離模式執行 WWW 服務),結果奇怪的事發生了,原本ASP可以發送mail的,突然不能發送,還有錯誤訊息,把隔離模式取消,就可以發送了,很怪吧 (CDO.Message也是,可參考)

程式如下
Set objEmail = CreateObject("CDONTS.NewMail")
objEmail.From = "寄件者"
objEmail.To = "收件者"
objEmail.Subject = "CDONTS.NewMail test"
objEmail.body = "test"
objEmail.Send
Response.write "使用CDONTS.NewMail發信成功"

錯誤訊息如下

Microsoft VBScript 執行階段錯誤 錯誤 '800a0046'
沒有使用權限
/mis33.asp, 列8

解決辦法

在IIS管理員的SMTP按右鍵選內容
在安全性頁籤新增下列兩各的權限就OK
IUSR_電腦名稱
IWAM _電腦名稱

2009年3月4日 星期三

550 5.7.1 Unable to relay

使用JAVAMAIL寄信,結果出現下列錯誤
javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
class javax.mail.SendFailedException: 550 5.7.1 Unable to relay

意思就是你的mail server不允許你經由它寄送外部郵件,寄送內部郵件應該沒問題啦,反正應該是驗證的問題囉,不是你程式裡沒有設定要驗證就是mail server不讓你驗證,所以請檢查發送mail的程式裡有沒有啟用驗證囉,有啟用通常會用到帳號密碼囉,不過像我的情況是,該系統被加入relay清單裡,exchange似乎強制不讓我驗證,就算程式有驗證也沒用,解決辦法就是請管理者幫你把該系統從relay清單移除,然後AP server記得重啟或AP重新部署,有時不這麼作,會有cache造成怪怪的問題喔!!

可參考javamail的FAQ,有相關說明
When I try to send a message, why do I get javax.mail.SendFailedException: 550 Unable to relay for my-address?

其實若使用JAVAMAIL寄信發生問題,我發現開啟debug模式去看與mail server通訊的細節,會比較清楚問題發生在哪喔,附上debug模式的記錄,其中綠字是我的補充說明囉

以DEBUG為開頭表示是JavaMail run-time印出來的

此次mail session所使用的Provider
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]

SMTP所使用的參數設定,這邊要注意useAuth是"true"還是"false","true"代表程式有啟用驗證,"false"代表沒有啟用,但是有例外的情況,有時程式明明有啟用,但是這裡還是顯示"false",表示mail server可能不讓你驗證喔,像exchange的話,若系統在relay清單裡,程式有設驗證也沒用喔,這時寄外部郵件會有問題,這是我自己測試很多次得來的結論
DEBUG SMTP: useEhlo true, useAuth false

這裡是顯示試圖連接mail.test.com.tw的25port
DEBUG SMTP: trying to connect to host "mailt.test.com.tw", port 25
這裡就表是已連接到囉,網路是通的
220 HCS03.mail.local Microsoft ESMTP MAIL Service ready at Fri, 20 Feb 2009 11:51:17 +0800
DEBUG SMTP: connected to host "mailt.test.com.tw", port: 25
使伺服器可以表明自己支援擴展簡單郵件傳輸協定 (ESMTP) 命令
EHLO sva511

250-HCS03.mail.local Hello [192.168.107.2]

下面就是支援哪些命令囉
250-SIZE 10485760

250-PIPELINING
250-DSN

250-ENHANCEDSTATUSCODES
250-STARTTLS
250-X-ANONYMOUSTLS

250-AUTH NTLM LOGIN

250-X-EXPS GSSAPI NTLM

250-8BITMIME

250-BINARYMIME
250-CHUNKING
250-XEXCH50
250 XRDST
DEBUG SMTP: Found extension "SIZE", arg "10485760"
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "DSN", arg ""
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "X-ANONYMOUSTLS", arg ""
DEBUG SMTP: Found extension "AUTH", arg "NTLM LOGIN"
DEBUG SMTP: Found extension "X-EXPS", arg "GSSAPI NTLM"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "BINARYMIME", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: Found extension "XEXCH50", arg ""
DEBUG SMTP: Found extension "XRDST", arg ""
DEBUG SMTP: use8bit false
MAIL FROM:< sender@test.com.tw >

寄件者ok
250 2.1.0 Sender OK
RCPT TO:< receiver22@yahoo.com >

無法幫你轉信給該寄件者
550 5.7.1 Unable to relay
DEBUG SMTP: Invalid Addresses
DEBUG SMTP: receiver22@yahoo.com
DEBUG SMTP: Sending failed because of invalid destination addresses
RSET
250 2.0.0 Resetting

2009年2月12日 星期四

SMTP 550 5.7.1 not permissions as this sender

如果寄信失敗,結果回傳錯誤碼550 5.7.1 ,錯誤訊息跟下面三種情況一樣的話,表示你使用的發信伺服器,有限制寄件者需與帳號一致喔,意思就是若用我的帳號發信,寄件者就不能設成別人,請檢查你的程式寄件者是不是設的與帳號不同!一般發信若是使用SMTP services來寄信是不會有這種困擾的,因為寄件者就算設不存在的也照樣可以寄!

2009年2月11日 星期三

JAVAMAIL範例2(不需認證的smtp)

這個blogger不允許直接貼上完整的jsp程式碼囉,所以我只列出主要的,記得"<"與"%"還有"%"跟">"是沒有空白的喔

< % @page import="java.util.*" % >
< % @page import="javax.mail.*" % >
< % @page import="javax.activation.*" % >
< % @page import="javax.mail.internet.*" % >


< %
String host = "127.0.0.1";
String receiver = "收件人";
String sender = "發信人";
String subject = "主旨";
String mess = "內文success";

boolean sessionDebug = false;

Properties prop = new Properties();
prop.put("mail.smtp.host",host); //指定SMTP server

Session mailsess = Session.getInstance(prop);
mailsess.setDebug(sessionDebug); //是否在控制台顯示debug訊息

Message msg = new MimeMessage(mailsess);
//設定郵件
msg.setFrom(new InternetAddress(sender)); // 設定傳送郵件的發信人
InternetAddress[] address= {new InternetAddress(receiver)}; // 設定傳送郵件的收件者
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject(subject); //設定主題
msg.setText(mess); //設定內文

//發送郵件
Transport transport = mailsess.getTransport("smtp"); //只支持IMAP、 SMTP和 POP3
transport.send(msg);
% >

2009年2月10日 星期二

JAVAMAIL範例1(需要認證的smtp)

最近mail server升級,結果部分系統的發信機制出了問題,所以需要簡單的範例程式來測一下,但是我不會java,只好上網稍微研究了一下囉,簡單的code卻花了我不少時間研究,分享給有需要的朋友,這個blogger不允許直接貼上完整的jsp程式碼囉,所以我只列出主要的,記得"<"與"%"還有"%"跟">"是沒有空白的喔

< % @page import="java.util.*" % >
< % @page import="javax.mail.*" % >
< % @page import="javax.activation.*" % >
< % @page import="javax.mail.internet.*" % >


String host = "發信伺服器";
String receiver = "收件者";
String sender = "寄件者";
String subject = "主旨";
String mess = "內文";
String username = "帳號";
String password = "密碼";

boolean sessionDebug = false;

//Get system properties
Properties prop = System.getProperties();
prop.put("mail.smtp.host",host); //指定SMTP server
prop.put("mail.transport.protocol","smtp"); //設定傳送協定
prop.put("mail.smtp.auth","true"); //設定是否須smtp驗證

// 產生新的Session
javax.mail.Session mailsess = Session.getDefaultInstance(prop);
mailsess.setDebug(sessionDebug); //是否在控制台顯示debug訊息

Message msg = new MimeMessage(mailsess);
//設定郵件
msg.setFrom(new InternetAddress(sender)); // 設定傳送郵件的發信人
InternetAddress[] address= {new InternetAddress(receiver)}; // 設定傳送郵件的收件者
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject(subject); //設定主題
msg.setText(mess); //設定內文

//發送郵件
Transport transport = mailsess.getTransport("smtp"); //只支持IMAP、 SMTP和 POP3
transport.connect(host, username, password); //以smtp的方式登入mail server
transport.sendMessage(msg,msg.getAllRecipients());
transport.close();
% >