SmtpClient 發送郵件
本文关键字:SmtpClient | 更新日期: 2023-09-27 18:33:02
我正在尝试使用以下代码通过gmail发送邮件,但不断收到"无法连接到远程主机"的错误。我已经仔细检查了我的配置,一切对我来说都很好。有人看到我缺少的东西吗?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using System.Net;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
SmtpClient client = new SmtpClient();
client.UseDefaultCredentials = false;
client.Credentials = new NetworkCredential("mymail@gmail.com", "mypass");
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
MailMessage mail = new MailMessage();
mail.From = new MailAddress("mymail@gmail.com");
mail.To.Add("tomail@tomail.org");
mail.Subject = "subject thing";
mail.Body = "dubbly doo";
try
{
client.Send(mail);
}
catch(SmtpException e)
{
Console.Write(e.InnerException.Message);
Console.ReadLine();
}
}
}
}
您很可能在
访问指定的主机和端口时遇到问题。这可能是一系列的事情,其中之一是被防火墙阻止。首先从命令提示符使用 telnet 程序连接到主机和端口,即 telnet smtp.gmail.com 587
.如果确实连接,则可以通过按 ctrl+] 并在收到提示时键入 quit
来断开连接。如果 telnet 连接失败,请开始调查防火墙/网络相关问题。
还可以通过将以下内容添加到应用程序的 .config 文件来获取包含详细调试信息的文件:
<system.diagnostics>
<sources>
<source name="System.Net">
<listeners>
<add name="TraceFile"/>
</listeners>
</source>
<source name="System.Net.Sockets" maxdatasize="1024">
<listeners>
<add name="TraceFile"/>
</listeners>
</source>
</sources>
<sharedListeners>
<add name="TraceFile" type="System.Diagnostics.TextWriterTraceListener" initializeData="System.Net.trace.log" traceOutputOptions="DateTime"/>
</sharedListeners>
<switches>
<add name="System.Net" value="Verbose"/>
<!--<add name="System.Net.Sockets" value="Verbose"/>-->
</switches>
<trace autoflush="true" />
</system.diagnostics>
您是否设置了电子邮件帐户以允许 smtp.gmail.com?
http://support.google.com/mail/bin/answer.py?hl=en&answer=13273
将您的代码与通过 gmail 发送网络中电子邮件的答案进行比较。如果这是问题,则不是肯定的,但是在创建 SmtpClient 时缺少以下内容:
DeliveryMethod = SmtpDeliveryMethod.Network
链接问题中的示例:
var smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};