当前位置: 首页 > 编程语言 > C#

使用smtpSendAsync发送邮件分享

时间:2023-04-10 14:51:36 C#

使用smtpSendAsync发送邮件这是我需要发送邮件给我的错误。但是此后的错误是:此时无法启动异步操作。异步操作只能在异步处理程序或模块内启动,或者在页面生命周期中的某些事件发生时启动。如果在执行页面时发生此异常,请确保将页面标记为。此异常还可能表示尝试调用“asyncvoid”方法,这在ASP.NET请求处理中通常不受支持。相反,异步方法应该返回一个任务,调用者应该等待它。我开始构建MVC并使用类来跟踪页面区域。我使用SendAsync的原因正是发送电子邮件等速度更快一些。此错误仅在我尝试向用户发送电子邮件时发生。publicstaticvoidNewPassword(stringmail,stringname,stringpassword){MailDefinitionoMailDefinition=newMailDefinition();oMailDefinition.BodyFileName="~/MailList/emailskabelon/NewPassword.html";oMailDefinition.From=FromMail;DictionaryoReplacements=newDictionary();oReplacements.Add("<>",name);oReplacements.Add("<>",password);System.Net.Mail.MailMessageoMailMessage=oMailDefinition.CreateMailMessage(mail,oReplacements,newLiteralControl());oMailMessage.Subject=NewpasswordTitle+WebsiteName;oMailMessage.IsBodyHtml=true;SmtpClientsmtp=newSmtpClient(AzureApi);System.Net.NetworkCredentialnetcred=newSystem.Net.NetworkCredential(AzureName,AzurePassword);smtp.UseDefaultCredentials=false;smtp.EnableSsl=true;smtp.Credentials=netcred;smtp.Port=Convert.ToInt32("25");smtp.DeliveryMethod=SmtpDeliveryMethod.Network;使用(varsmtpClient=newSmtpClient()){smtp.SendAsync(oMailMessage,无效的);我试过这样做:publicstaticasyncNewPassword(stringmail,stringname,stringpassword){...我在这里看到:https://stackoverflow.com/a/35212320/7391454将您的方法更改为:publicasyncTaskSendEmail(stringtoEmailAddress,stringemailSubject,stringemailMessage){varmessage=newMailMessage();message.To.Add(toEmailAddress);message.Subject=emailSubject;message.Body=emailMessage;使用(varsmtpClient=newSmtpClient()){awaitsmtpClient.SendMailAsync(message);调用它:vartask=SendEmail(toEmailAddress,emailSubject,emailMessage);varresult=task.WaitAndUnwrapException();请参阅此处异步发送C#中的电子邮件?如何在此处从C#中的同步方法调用异步方法?您也可以尝试在单独的线程中定义异步选项我相信您已经在页面中插入了异步标记。如果一切正常,请尝试将代码放在下面的块中。this.Page.RegisterAsyncTask(newPageAsyncTask(asyncctoken=>{varresult=awaitSomeOperationAsync(ctoken);//结果操作。}));并没有真正回答你原来的问题,只是想强调你最好不要在没有让调用线程等待的情况下调用电子邮件发送代码。尽管您使用的是async/await,但从用户的角度来看,当服务器完成发送电子邮件时,您仍在浏览器中等待。这可能需要几毫秒,但最好还是由后台工作人员处理。所以IMO,使用HostingEnvironment.QueueBackgroundWorkItem(x=>SendEmail());将是一个更好的方法。话虽如此,如果应用程序域在中间回收,您仍然有终止异步任务的风险。但在我看来,这种情况极不可能发生。即使发生这种情况,您也可以使用取消令牌并绕过它。以上就是C#学习教程:使用smtpSendAsync发送邮件分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢