发送电子邮件MVC#
我试图在一个动作中发送一封电子邮件。但是,该操作始终返回一个空白屏幕 视图: 类邮件引擎:发送电子邮件MVC#,c#,asp.net-mvc,html-email,C#,Asp.net Mvc,Html Email,我试图在一个动作中发送一封电子邮件。但是,该操作始终返回一个空白屏幕 视图: 类邮件引擎: public static void Send(string from, string to, string subject, string body) { try { MailMessage mail = new MailMessage(from, to, subject, body); SmtpClient client = new SmtpClient
public static void Send(string from, string to, string subject, string body)
{
try
{
MailMessage mail = new MailMessage(from, to, subject, body);
SmtpClient client = new SmtpClient("smtp.mymail.com");
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.EnableSsl = false;
client.Send(mail);
}
catch
{
}
}
您正在应用程序中使用空的catch块。这并不是一个好主意,要对此进行更深入的讨论,请参阅和相关问题 发生在你身上的事情如下:
- 在
方法的Sendlink(FormCollection-FormCollection)
块内的某个地方抛出异常。此异常似乎起源于try
调用,因为该RedirectToAction(“canvashare”)
块中的所有其他调用都不会生成异常。(特别是因为您抑制了try
方法引发的异常。)mailnengine.Send
- 调用
中的空Sendlink(FormCollection-FormCollection)
块。这是您应该生成错误消息并将其显示给用户的地方。但是,您已决定将其留空,这样就没有人知道出现了什么问题以及是什么问题catch
- 控制流达到
返回空值
方法中的code>语句。我猜你把它放在那里是因为编译器抱怨缺少返回值。现在返回空值,并导致呈现空视图Sendlink(FormCollection-FormCollection)
重定向到操作
,并找出它引发异常的原因。此异常可能表示您的代码或应用程序中存在问题,您需要采取措施防止其发生
下一个修复方法是在应用程序中实际实现错误处理。删除所有空的catch
块,并考虑是否要抛出异常或是否要立即处理它。然而,忽视它几乎从来都不是一个好主意
为了说明应用程序中的问题:如果未引发
重定向到操作
中的异常,您的电子邮件发送可能仍会失败。但是,您的UI无法发现出现了问题,因为您忽略了MailClient.Send
方法中的异常。如果您将此邮件发送到生产部门,电子邮件发送将悄无声息地失败,您的客户将纳闷为什么他们从未收到过电子邮件。然后,您将很难找出实际问题是什么以及它发生在哪里。toemail
将始终为空
您需要将输入的
name
属性设置为:“toemail”
,以使其可绑定
<input type="text" id="toemail" name="toemail" />
因此,当启用自定义错误时,您可以在生产环境中返回一个友好的错误屏幕,或者在调试时禁用它以查看实际异常。首先,我不会使用FormCollection作为参数,而是使用SendLink(string-toemail)。查看ModelBinding了解更多信息。您的MailEngine.Send可能引发异常,导致SendLink操作返回null而不是返回af视图。当心空的catch块。您尝试过调试器吗?我将Formcollection更改为string toemail,在调试时,toemail为空。您需要将输入的
name
属性设置为:“tomail”
,以使其可绑定。非常感谢Chris,在我的代码中实现这一点非常有用。虽然这对于发送电子邮件来说确实是个问题,但为什么会导致返回一个空白屏幕?@Chris:mail引擎很可能会在toemail
为空时引发异常。因此,操作结果为空->空白屏幕。mailnengine
永远不会引发异常,因为所有异常都在mailnengine.Send中捕获。你说得对,我忽略了它。另一个抛出NullReferenceException
的可能性是string message=Session[“link”].ToString()
Yes,但在input
标记上添加name
属性仍然不会影响这一点。我想知道为什么这会促使人们改变行为。
public static void Send(string from, string to, string subject, string body)
{
try
{
MailMessage mail = new MailMessage(from, to, subject, body);
SmtpClient client = new SmtpClient("smtp.mymail.com");
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.EnableSsl = false;
client.Send(mail);
}
catch
{
}
}
<input type="text" id="toemail" name="toemail" />
protected override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext);
if (filterContext.HttpContext.IsCustomErrorEnabled)
{
if (filterContext.Exception is SecurityException)
{
filterContext.ExceptionHandled = true;
filterContext.Result = View("FriendlyError");
//log the exception etc...
}
}
}