gpt4 book ai didi

asp.net-mvc - 使用 smtp 发送电子邮件仅在通过 Outlook 发送后才有效

转载 作者:行者123 更新时间:2023-12-02 07:53:43 26 4
gpt4 key购买 nike

我正在尝试使用 asp.net mvc 应用程序发送电子邮件。 Smtp 客户端在 web.config 中配置,例如:

<mailSettings>
<smtp from="noreply@test.sk">
<network host="mail.test.sk" defaultCredentials="false" userName="noreply@test.sk" password="pass" port="25"/>
</smtp>
</mailSettings>

C#:

using (SmtpClient client = new SmtpClient())
{
MailMessage message = new MailMessage(from, to, subject, body);
client.Timeout = 10000;
client.Send(message);
return false;
}

问题是,在我尝试使用 Outlook 发送电子邮件之前,它不起作用(我遇到超时异常)。通过 Outlook 发送电子邮件后,它也通过我的网络应用程序成功发送。 Outlook 是否正在执行某种特殊类型的身份验证,然后允许来 self 的 IP 的所有电子邮件进行身份验证?请问用outlook发送后才有效是什么原因?

顺便说一句:我正在 VS asp.net 开发服务器中运行该应用程序。当我将其部署到虚拟主机服务器时,它不起作用(超时)。我的网络托管提供商告诉我该服务器上有一个经典的 smtp 身份验证(不是 smtp 之前的 pop3)。

编辑:

我发现,当它工作时,我通过 telnet 尝试它或通过wireshark跟踪它,通信开始于:

220 mail2.hostmaster.sk ESMTP Postfix
EHLO fernet-PC
250-mail2.hostmaster.sk
250-PIPELINING
250-SIZE 104857600
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
...

与不起作用时(前一天刚刚尝试过)相比,整个通信看起来像:

220-mail2.hostmaster.sk ESMTP Postfix
EHLO fernet-PC
250-mail2.hostmaster.sk
250-SIZE 104857600
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

因此,支持的身份验证方法和对管道的支持存在差异。我猜想 System.Net.Mail.SmtpClient 不知道应该使用哪种身份验证方法,因此它会卡住,因此我收到超时异常。

有趣的是,Outlook 连接和发送电子邮件没有任何问题。

我通过不使用他们的 smtp 服务器解决了我的问题,因为我的时间不多了。我正在使用 gmail 的 smtp 服务器。我创建了新的 gmail 帐户,并在其中将别名设置为我需要的内容,因此该电子邮件乍一看似乎不是来自 gmail。

最佳答案

我在网站上修复了类似的问题,并在研究该问题时遇到了这个问题。

以下代码适用于 Google Apps for Business;

public class SendSMTPEmail
{
public static void SendText(string ToName, string ToEmail, string FromName, string FromEmail, string Subject, string Content)
{
MailAddress from = new MailAddress(ToEmail, ToName);
MailAddress to = new MailAddress(ToEmail, ToName);

var smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
Credentials = new NetworkCredential("username@googlemail.com", "yourpassword"),
Timeout = 20000
};

MailMessage message = new MailMessage()
{
From = from,
Body = Content,
Subject = Subject
};

message.To.Add(to);

smtp.Send(message);

}
}

这有帮助吗?

关于asp.net-mvc - 使用 smtp 发送电子邮件仅在通过 Outlook 发送后才有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14130579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com