从gmail SMTP C#连接超时发送邮件

Ber*_*ice 10 c# gmail smtp web-config

我一直在尝试通过C#从gmail帐户发送电子邮件,以便我的网站进行帐户注册.

我尝试了几种方法,但是同样的异常继续弹出:System.Net.Mail.Smtp Exception - Connection已经超时.

这是我在Web.config文件中包含的内容:

<system.net>
    <mailSettings>
        <smtp deliveryMethod="Network" 
              from="Writely &lt;mrbk.writely@gmail.com&gt;">
            <network host="smtp.gmail.com" 
                     port="465" 
                     enableSsl="true" 
                     defaultCredentials="false" 
                     userName="mrbk.writely@gmail.com" 
                     password="******" />
        </smtp>
    </mailSettings>
</system.net>
Run Code Online (Sandbox Code Playgroud)

其中writely是我的网站名称,mrbk.writely @ gmail.com是我希望发送电子邮件的帐户.

然后在我的帐户控制器中,当我连接我的数据库并将用户保存在我的表中时,我正在创建我的MailMessage对象并尝试通过以下方式查找相同的邮件:

using (DBConnection conn = new DBConnection())
{
       conn.UserInfoes.Add(userInfo);
       conn.SaveChanges();

       MailMessage mail = new MailMessage();
       mail.From = new MailAddress("mrbk.writely@gmail.com");
       mail.To.Add("bernice.zerafa11@gmail.com");
       mail.Subject = "Welcome to Writely";
       mail.Body = "Test content";

       SmtpClient smtp = new SmtpClient();
       smtp.Send(mail);
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么或做错了什么?我读到这是在堆栈溢出的其他问题上做这个的好方法,所以我真的不知道这里有什么问题.

谢谢你的帮助 :)

Jas*_*ins 7

您需要告诉SmtpClient要使用的设置.它不会自动从Web.Config文件中读取此信息.

SmtpClient smtp = new SmtpClient("smtp.gmail.com", 465);
smtp.Credentials = new NetworkCredential("mrbk.writely@gmail.com", "***");
smtp.EnableSsl = true;
smtp.Send(mail);
Run Code Online (Sandbox Code Playgroud)

  • @Bernice您使用的端口取决于您是否使用SSL.如果使用SSL,则应使用465;对于纯文本,应使用587.显然,GMail非常容错,因为我在示例中混淆了我的端口. (2认同)