2015-10-15 277 views
-2

在我的應用程序中,我使用SmtpClient發送電子郵件(僅限於gmail賬戶)。一切都很好,很完美。取消使用smtp發送郵件SMTP

我在Gmail中看到一個選項,允許我們取消/撤消發送郵件。如下圖所示。在這裏我的問題是關於這個問題,我如何根據一些條件取消/撤銷從我的程序發送的郵件。

enter image description here

下面是使用用於發送郵件的代碼我':

MailMessage mail = new MailMessage("[email protected]", "[email protected]"); 
    SmtpClient client = new SmtpClient(); 
    client.Port = 587; 
    client.DeliveryMethod = SmtpDeliveryMethod.Network; 
    client.UseDefaultCredentials = false; 
    client.Credentials = new System.Net.NetworkCredential("[email protected]", "xxxxxxx"); 
    client.Host = "smtp.gmail.com"; 
    client.EnableSsl = true; 
    mail.Subject = "this is a test email."; 
    mail.Body = "this is my test email body"; 
    client.Send(mail); 
    // this is what i want to do 
    if(someCondition=true) 
    {//undo the send operation} 
+1

這不是SMTP的功能。只需讓您的程序安排在30秒內發送電子郵件,而不是立即發送。 – spender

回答

1

從我有限的知識,則無法取消已發送到郵件服務器郵件。你可以完成由撤消功能:您的服務器

  • A(延遲作業計劃)上

    • 保存在一個表中的郵件的詳細信息(可以稱之爲pending_emails)或(重複作業每X分鐘)查詢條目pending_emails早些時候提出5分鐘,並將它們發送到SMTP服務器(如你現在正在做的)
    • 作業發送電子郵件,並刪除從pending_emails
    • 撤消按鈕刪除從pending_emails的電子郵件的郵件
  • -1

    Google只會延遲發送電子郵件30秒,最簡單的方法是在發送之前通過smtp或使用過濾器發送郵件之前,使用30秒的異步計時器。