2012-04-04 57 views
0

我對使用此代碼,如果主機的Gmail則充當diffrente發送郵件的SMTPC#SMTP響應

IM幾個問題:

foreach (string host in hosts) 
{ 
    SmtpClient sc = null; 
    try 
    { 
     if (emailDomain.ToLower() == "gmail.com") 
     { 
      MailSend.MailSendApp.EventLog.WriteEntry("mail to gmail.com"); 

      sc = new SmtpClient("smtp.gmail.com", 587); 
      sc.UseDefaultCredentials = false; 
      sc.DeliveryMethod = SmtpDeliveryMethod.Network; 
      sc.Credentials = new NetworkCredential("[email protected]", "PWD"); 
      sc.EnableSsl = true; 
     }         } 
     else 
     { 
      sc = new SmtpClient(host); 

      sc.Send(mailMessage); 

      break; 

     } 

是possiable從SMTP得到答案: 1.電子郵件到達 2.如果電子郵件中存在

感謝

+0

nope。我想這就是爲什麼他們稱之爲電子失敗。 – McGarnagle 2012-04-04 07:14:58

+0

代碼有什麼問題。 gmail與主機的行爲方式有什麼不同? – 2012-04-04 07:15:19

+0

@FredrikMörk:看起來他們試圖以特定的Gmail用戶身份發送郵件,可能是爲了避免限制郵件速度或者因爲他們的SMTP網關的發件人信譽不佳而且Gmail拒絕電子郵件。 – 2012-04-04 07:27:34

回答

0

早在一天,你可以直接查詢是否電子郵件地址存在於給定的服務器上(VRFY user SMTP命令)。然後,垃圾郵件誕生了,幾乎所有的電子郵件服務器都刪除了該功能,因爲垃圾郵件發送者會使用漫遊器查詢每個郵件服務器上的可能電子郵件收件人以構建垃圾郵件列表。

您仍然會收到一封普通的退回報告(通過電子郵件發回至回覆地址,表明遞送失敗)。我使用名爲Boogie Tools的工具來自動處理退回消息。

由於類似的原因,Gmail不提供傳遞或閱讀回執(雖然有些電子郵件服務器仍然可以選擇允許)...太多的濫用潛力。

1

如果您想收到電子郵件已到達的通知,您需要發送電子郵件至delivery notification options

mailMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure; 

如果電子郵件不存在,您將收到一封電子郵件回您的發件人地址,而不是您的SMTP類。

總之,沒有簡單的方法可以純粹從SMTP類的角度來確定這兩件事。

+0

關於gmail的另外一件事是郵件發送是永遠不會是我添加到emailMessage的FROM,它不能改變我的FROM是我從他們的smtp請求的UID的用戶名 – 2012-04-04 07:39:27