发出从GoDaddy上托管的ASP.NET MVC应用程序发送邮件消息的问题

And*_*ers 6 asp.net-mvc smtp

我在GoDaddy上托管的MVC Web应用程序上有一个表单,用户可以填写并发送到我们的办公室.我目前正在使用Gmail帐户和GoDaddy电子邮件帐户(链接到我的托管空间)对其进行测试.有了Gmail代码,电子邮件将从我的本地主机发送,但当我将其发布到网络时,我收到以下错误:

请求类型'System.Net.Mail.SmtpPermission,System,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的权限失败.

这是我正在使用的代码(从这篇文章中借用),凭据已更改并删除了密码:

var fromAddress = new MailAddress("iihs.eval@gmail.com", "FEA Drone");
var toAddress = new MailAddress("improveithomeservices@gmail.com", "ImproveIt Home Services");
const string fromPassword = "<removed>";
var subject = string.Format("Energy Evaluation Request for {0} {1}", model.FirstName, model.LastName);
var body = MailBody(results);

var smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var message = new MailMessage(fromAddress, toAddress)
{
    Subject = subject,
    Body = body
})
{
    smtp.Send(message);
}    
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用我为此特定表单设置的GoDaddy电子邮件,并再次在本地发送.但是,当这个上传时,它只是超时而不是给我任何有用的信息.这是代码:

var fromAddress = new MailAddress("fea@goimproveit.com", "FEA Drone");
var toAddress = new MailAddress("improveithomeservices@gmail.com", "ImproveIt! Home Services");
const string fromPassword = "<removed>";
var client = new SmtpClient
{
    Host = "relay-hosting.secureserver.net",
    Port = 25,
    EnableSsl = false,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Timeout = 20000,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};

using (var msg = new MailMessage(fromAddress, toAddress)
{
    Subject = string.Format("Energy Evaluation Request for {0} {1}", model.FirstName, model.LastName),
    IsBodyHtml = false,
    Body = MailBody(results)
})
{
    client.Send(msg);
}
Run Code Online (Sandbox Code Playgroud)

最初我有smtpout.secureserver.net我的GoDaddy主机,但我从这篇文章中发现我需要将其更改为relay-hosting.secureserver.net.使用更新的主机信息,脚本将运行,但邮件消息不会到达目标电子邮件收件箱(或垃圾邮件箱).

编辑

使用Maxim的代码,似乎我已经获得了一个"正常运行"的版本.电子邮件不会立即显示在目标收件箱中,但会在大约15分钟后显示.太糟糕了,GoDaddy在程序化电子邮件方面似乎是一个巨大的PITA.

这是我得到的:

var emailmessage = new System.Web.Mail.MailMessage()
{
    Subject = subject,
    Body = body,
    From = fromAddress.Address,
    To = toAddress.Address,
    BodyFormat = MailFormat.Text,
    Priority = System.Web.Mail.MailPriority.High
};

SmtpMail.SmtpServer = "relay-hosting.secureserver.net";
SmtpMail.Send(emailmessage);
Run Code Online (Sandbox Code Playgroud)

再次感谢您的帮助,我希望我能弄明白如何让GoDaddy更好地合作.如果可以,我会回复更新.

Max*_*sky 7

我在GoDaddy上托管了一些ASP.NET MVC应用程序,它们发送电子邮件.不幸的是,GoDaddy电子邮件政策有点糟糕:

首先,您必须使用relay-hosting.secureserver.net - 您不能使用外部SMTP服务器,例如Gmail.

其次,relay-hosting通常很慢.根据我的经验,一些电子邮件大约需要90分钟发送,而其他电子邮件则根本没有发送.

我已经多次通过GoDaddy支持来回发送关于此问题的电子邮件,但他们还没有解决巨大的等待时间/问题或允许外部SMTP服务器.


至于为什么你的消息没有传递,你应该多次尝试运行脚本以确保没有发生任何异常.如果它仍然不起作用,这是我的邮件代码:

var emailmessage = new System.Web.Mail.MailMessage()
                                   {
                                       Subject = "Subject",
                                       Body = "Body",
                                       From = "myFromAddress@domain.com",
                                       To = "myToAddress@someotherdomain.com",
                                       BodyFormat = MailFormat.Text,
                                       Priority = MailPriority.High
                                   };

SmtpMail.SmtpServer = "relay-hosting.secureserver.net";
SmtpMail.Send(emailmessage);
Run Code Online (Sandbox Code Playgroud)

唯一不同的是(据我所知),您正在尝试向SMTP服务器提供凭据.实际上,relay-hosting.secureserver.net不需要任何凭据,但只有在检测到消息是从GoDaddy服务器发送时才会发送电子邮件.这可能会解决您的问题!