我在 GoDaddy 托管的 MVC Web 应用程序上有一个表单,用户可以填写该表单并发送给我们的办公室。我目前正在使用 Gmail 帐户和 GoDaddy 电子邮件帐户(链接到我的托管空间)对其进行测试。使用 Gmail 代码后,电子邮件将从我的本地主机正常发送,但当我将其发布到网络时,出现以下错误:
请求类型为“System.Net.Mail.SmtpPermission”的权限,
系统,版本=2.0.0.0,文化=中性,
PublicKeyToken=b77a5c561934e089' 失败。
这是代码(借用这个帖子 https://stackoverflow.com/questions/32260/sending-email-in-net-through-gmail/32336#32336)我正在使用,凭据已更改且密码已删除:
var fromAddress = new MailAddress("[email protected] /cdn-cgi/l/email-protection", "FEA Drone");
var toAddress = new MailAddress("[email protected] /cdn-cgi/l/email-protection", "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);
}
然后,我尝试使用我为此特定表单设置的 GoDaddy 电子邮件,并再次在本地发送。然而,当这个上传时,它只是超时,而不是给我任何有用的信息。这是该代码:
var fromAddress = new MailAddress("[email protected] /cdn-cgi/l/email-protection", "FEA Drone");
var toAddress = new MailAddress("[email protected] /cdn-cgi/l/email-protection", "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);
}
本来我有smtpout.secureserver.net
对于我的 GoDaddy 主机,但我发现本文 http://help.godaddy.com/article/955我需要将其更改为relay-hosting.secureserver.net
。使用更新的主机信息,脚本将运行,但邮件消息不会到达目标电子邮件收件箱(或垃圾邮件箱)。
Edit
使用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);
再次感谢您的帮助,我希望我能弄清楚如何让 GoDaddy 更好地合作。如果可以的话,我会回复更新。