[英]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.