我正在尝试将电子邮件作为网络应用的一部分发送到外部地址。使用服务器上运行的简单可执行文件时,我可以发送电子邮件:
private void button1_Click(object sender, EventArgs e)
{
MailMessage message = new MailMessage(welcomeMessageFrom, toAddress, welcomeMessageSubject, welcomeMessageSubject);
SmtpClient emailClient = new SmtpClient("mail.sortuv.com");
System.Net.NetworkCredential SMTPUserInfo = new System.Net.NetworkCredential(username, password);
emailClient.UseDefaultCredentials = false;
emailClient.Credentials = SMTPUserInfo;
emailClient.Send(message);
}
但是,从ASP.NET页面尝试相同的代码会产生以下异常:
Mailbox unavailable. The server response was: 5.7.1 Unable to relay for <user's email>
我是IIS新手,但您对如何调试有建议吗?
更新:我还必须为用户指定域名。仍然不确定为什么没有它的常规.exe是好的。希望这有助于某人。
答案 0 :(得分:1)
似乎是凭据问题。普通的exe在您的帐户下运行。 ASP.NET应用程序在Windows Server中的NETWORK SERVICE和Windows XP下的ASPNET下运行。 您必须使用其他凭据才能从ASP.NET
成功发送电子邮件答案 1 :(得分:0)
尝试添加
emailClient .DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;
答案 2 :(得分:0)
您是否设置了与邮件参数相关的web.config? IIRC,web.config将覆盖您的代码设置。
另外,您可以做的其他事情是启用日志记录,以实际查看SmtpClient发送的内容。
您需要在.config文件中添加一些值。这是一个例子:
<configuration>
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="System.Net" >
<listeners>
<add name="MyTraceFile"/>
</listeners>
</source>
<source name="System.Net.Sockets">
<listeners>
<add name="MyTraceFile"/>
</listeners>
</source>
</sources>
<sharedListeners>
<add
name="MyTraceFile"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="System.Net.trace.log" />
</sharedListeners>
<switches>
<add name="System.Net" value="Verbose" />
<add name="System.Net.Sockets" value="Verbose" />
</switches>
</configuration>
这是一个包含更多信息的链接: http://systemnetmail.com/faq/4.10.aspx
答案 3 :(得分:0)
这是否适用于IIS 7,因为我遇到了类似的问题,我必须在服务器上启用smtp服务
并为那里的每个域设置邮件
答案 4 :(得分:0)
感谢所有帮助人员,我只是想通了。我必须指定域名:
SmtpClient emailClient = new SmtpClient(servername);
System.Net.NetworkCredential SMTPUserInfo = new System.Net.NetworkCredential(name, pass);
SMTPUserInfo.Domain = domain; // i.e. "foo.com"
emailClient.UseDefaultCredentials = false;
emailClient.Credentials = SMTPUserInfo;
emailClient.Send(message);