我在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更好地合作.如果可以,我会回复更新.
我在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服务器发送时才会发送电子邮件.这可能会解决您的问题!
| 归档时间: |
|
| 查看次数: |
10209 次 |
| 最近记录: |