通过 Gmail SMTP 服务器(SSL)发送电子邮件

4
我知道有很多关于如何使用C#发送电子邮件的示例,但我真的遇到了一些问题,无法使其正常工作。
我总是收到“发送邮件失败”的错误,无法连接到远程服务器 - 由于活动机器积极拒绝它(此处为IP地址),因此无法建立连接
这个错误是什么意思?我该如何解决?
非常感谢任何帮助。
这是我一直在使用的代码:(尽管我已经尝试了很多方法)
string SendersAddress = "test@gmail.com";
string ReceiversAddress = "test1@gmail.com";
const string SendersPassword = "test-pass-here";
const string subject = "Testing";
const string body = "Hi This Is my Mail From Gmail";
try
{
    SmtpClient smtp = new SmtpClient
        {
            Host = "smtp.gmail.com",
            Port = 587,
            EnableSsl = true,
            DeliveryMethod = SmtpDeliveryMethod.Network,
            Credentials = new NetworkCredential(SendersAddress, SendersPassword),
            Timeout = 3000
        };
    MailMessage message = new MailMessage(SendersAddress, ReceiversAddress, subject, body);
    smtp.Send(message);
}
catch (Exception ex)
{
}

谢谢!


如果机器主动拒绝连接,那么你就知道服务器存在,但是正在拒绝你的连接。听起来像是你使用了错误的端口号或错误的服务器。 - Phil
看起来你的邮件服务器上没有运行SMTP服务,但是除非你明确说明你正在尝试如何发送邮件(当然,提供一些代码也会很有帮助),否则你的问题将很难回答。 - Frédéric Hamidi
我已经编辑了帖子以包含我当前正在使用的代码。谢谢大家 :) - Jerald
你解决了吗?我很好奇你的问题最终是什么。 - Rex Morgan
没有,我实际上很忙,可能会在本月的某个时候再次开始工作。 - Jerald
4个回答

2

看起来你在连接SMTP服务器时遇到了问题。

请确保端口25上的防火墙已经打开,并且在您尝试建立连接的任何地方都有一个正在运行的SMTP服务器。


2
您正在尝试与gmail建立端口为587的SSL连接。该端口必须使用TLS而不是SSL。

请改用端口465

另外,请注意Timeout属性以毫秒表示,因此3000可能有点短,具体取决于您的网络。请尝试使用更宽限的值,例如30000


1
现在它给我返回了"操作已超时"的错误信息。 - Jerald
@Jerald,是的,3秒的超时可能不够。回答已相应更新。 - Frédéric Hamidi
即使我将Timeout属性设置为30000-50000,仍然会给我相同的错误。 - Jerald
1
@Jerald,smtp.gmail.com 是否会回复你的机器发出的 ping 呢? - Frédéric Hamidi
@Jerald,很奇怪,我可以在端口465上无超时问题地telnet到smtp.gmail.com。你能试试吗?如果失败了,那么可能是因为Gmail暂时禁止了你的IP,因为它厌倦了在其TLS端口上接收你的SSL数据包 ;) - Frédéric Hamidi
"TELNET smtp.gmail.com 465" 并且它可以工作。只是用C#编写的,这真让人沮丧哈哈。 - Jerald

1
值得注意的是,确保您的防病毒软件没有阻止25号端口,我以前就被这个问题困扰过!

0

最近几天我也遇到了同样的问题,

简单解决方案:

首先检查 Telnet 是否正常,然后尝试在 C# 中执行相同的操作。 这里有一个很好的介绍:http://www.wikihow.com/Send-Email-Using-Telnet

只需注意,有些服务器使用 EHLO 命令而不是 HELO

编辑:

看一下连接到 Google SMTP 服务器的方法 here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接