簡體   English   中英

Kentico自定義電子郵件提供商-阻止發送電子郵件

[英]Kentico custom email provider - prevent email from being sent

在自定義電子郵件提供商上工作,在某些情況下,我阻止了電子郵件的發送。

注意:當前所有通過Kentico電子郵件隊列發送的電子郵件都需要保持這種狀態。

我嘗試刪除/存檔/停止發送電子郵件的所有選項均導致電子郵件保留在Kentioc電子郵件隊列中,狀態為發送或等待。

這是我正在嘗試的代碼,請參見“ if(stopEmail){..} ”中的選項

 protected override void SendEmailAsyncInternal(string siteName, MailMessage message, SMTPServerInfo smtpServer, EmailToken emailToken)
{

    string contentAll = "";
    bool stopEmail = false;

    // read email content
    try
    {
        if (message.AlternateViews.Count > 0)
        {

            for (int i = 0; i < message.AlternateViews.Count; i++)
            {

                var stream = message.AlternateViews[i].ContentStream;
                if (stream.CanRead)
                {
                    using (StreamReader reader = new StreamReader(stream, System.Text.Encoding.UTF8, false, 1000, true)) 
                    {
                        contentAll += reader.ReadToEnd();
                    }
                }

            }


        }
    }
    catch (Exception ex)
    {
        EventLogProvider.LogInformation("CMSCustom baned emails", "EMAIL SENDOUT", ex.Message + ", <br /> email content:<br /> " + contentAll);
    }


    // check if BANNED dmoains are in email
    string bannedEmails = "@somedomain.com";

    if (contentAll.Contains(bannedEmails))
    {
        stopEmail = true;

    }

    // if banned email found, stop email from being sent
    if (stopEmail)
    {
        //
        var m = new EmailMessage(message);
        var mi = EmailInfoProvider.SetEmailInfo(m, SiteContext.CurrentSiteID);
        //opt 4  - Stuck in email queue - sending/waiting
        //SmtpClient client = new SmtpClient(smtpServer.ServerName);
        //client.SendAsyncCancel();


        // opt 3 - Stuck in email queue - sending/waiting
        //EmailHelper.Queue.CancelSending();

        // opt 2 - Stuck in email queue - sending/waiting
       // EmailHelper.Queue.Delete(mi.EmailID);


        //opt 1 - Stuck in email queue - sending/waiting
        //mi.EmailStatus = EmailStatusEnum.Archived;
        //mi.Update();

        return;
    }



    base.SendEmailAsyncInternal(siteName, message, smtpServer, emailToken);




}

知道如何才能成功刪除/刪除特定電子郵件嗎?

謝謝 ):

嘗試以下行:

EmailInfoProvider.DeleteEmailInfo(mi.EmailID);

使用EmailHelper.Queue.CancelSending()會產生更廣泛的影響,並影響當前發送的郵件,而不僅僅是當前的電子郵件。

從Kentico管理頁面EmailHelper.Queue.Delete(mi.EmailID);代碼, EmailHelper.Queue.Delete(mi.EmailID); 應該工作,並最終調用相同的方法。 您是否在事件日志中看到任何錯誤,使您知道為什么刪除了電子郵件?

為了將電子郵件移動到“已發送電子郵件”,您需要調用EmailProvider.OnSendCompleted(AsyncCompletedEventArgs)

我使用以下功能在Kentico 9中將電子郵件標記為已完成。電子郵件仍然顯示在“已發送電子郵件”選項卡下,但是實際上從未發送過電子郵件。

private void CancelSend(EmailToken eToken)
{
    var completedEvent = new AsyncCompletedEventArgs(null, false, eToken);
    base.OnSendCompleted(completedEvent);
}

結合您的代碼,我們得到:

// if banned email found, stop email from being sent
if (stopEmail)
{
    CancelSend(emailToken);
    return;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM