首页 > 编程 > .NET > 正文

在.net中使用Gmail发送邮件

2024-07-10 13:04:51
字体:
来源:转载
供稿:网友

在项目开发中,发送邮件时一种非常常见的功能。一般的情况下,大型的公司都有自己的邮件系统,我们可以直接通过公司的pop/smtp server进行邮件的发送和接收。不过,对于一些小公司不具有这样的条件,他们一般通过一些公共的邮件服务通过商提供的邮件服务。比如sina,163就是很好的、常用的邮件服务。不过相比之下,我还是习惯使用google gmail。


一、在.net中通过gmail发送邮件

我们知道,smtp是我们最常用的邮件传输的协议。通过smtp方式,我们只需要配置相应的stmp server和port,使用我们的帐号和密码登录到stmp server,理论上我们就可以进行邮件的发送了。对于google gmail,对应的信息如下:

pop3 server (port: 995) :pop.gmail.com, ssl


smtp server (port: 25, 465, 587):smtp.gmail.com, tls

你通过你注册的gmail帐号和密码就可以登录smtp.gmail.com。下面是一段简单的c# code。


using system;
using system.collections.generic;
using system.text;
using system.net.mail;
using system.net;

namespace artech.mail.consoleapp
{
    class program
    {

        const string address_from = "[email protected]";
        const string address_to = "[email protected]";
        const string user_id = "myaccount";
        const string password = "password";
        const string smtp_server = "smtp.gmail.com";
        const int port = 587;
 
        static void main(string[] args)
        {


                sendmail(smtp_server, port);
                console.read();       
          
        }

        static void sendmail(string smtpserver, int port)


        {
            smtpclient mailclient = new smtpclient(smtpserver, 587);
            mailclient.enablessl = true;
            networkcredential crendetial = new networkcredential(user_id, password);

            mailclient.credentials = crendetial;
            mailmessage message = new mailmessage(address_from, address_to, "this is a subject", "this is the body of the mail");
          
            mailclient.send(message);
            console.writeline("mail has been sent to '{0}'", address_to);
        }
    }
}

熟悉system.net.mail. smtpclient,对上面的code应该是很熟悉了,在这里我就不想对上面的逻辑多做介绍了。不过我需要补充几点的是:

1.通过gmail,你只能以你登录到smtp server的account的名义对外发信,以上面为例,我以” myaccount”最为gmail的account登录,向email address 为[email protected]发送邮件,虽然在smtpclient.send方法中的我指定的from address为[email protected],当收信人受到该邮件的时候,邮件的发件人是[email protected],不会为[email protected]。这些很有必要的,可以防止你利用别人的名义发送邮件。这种机制并不是通用的,我就和同事开过这样的玩笑:通过公司的stmp server以另一个同事的名义向他发邮件。

2.虽然google对外宣称他们开发的smtp server的port为25,465和587,但是在代码中,我使用25和587一切正常,当时当我使用465的时候,怎么也发不出去。但是当我在outlook中把port配置为465的时候,发送邮件也正常。我还没来得及查阅到底是什么问题。知道原因的朋友,请不吝赐教。

3.对于像这种邮件服务功能的代码,我们一般写成可配置的。因为对于对于帐户和密码,甚至是stmp server,都有可能经常的变换。但是我们不用通过常用的<appsettings>来配置,也不用定义我们的custom configurationsection。因为configuration system已经为我们定义的内置的<mailsettings>来配置邮件相关的信息。比如:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.net>
    <mailsettings>
      <smtp from="[email protected]">
        <network host="smtp.gmail.com"
                 password="password"
                 port="587"
                 username=" myaccount @gmail.com"/>
      </smtp>
    </mailsettings>
  </system.net>
</configuration>

对于gmail,from实际上没有什么意义。

现在我们就可以进一步地简化我们的managed code了:


static void sendmail()
        {

            smtpclient mailclient = new smtpclient();
            mailclient.enablessl = true;
            mailmessage message = new mailmessage(address_from, address_to, "this is a subject", "this is the body of the mail");

            mailclient.send(message);
            console.writeline("mail has been sent to '{0}'", address_to);
        }

 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表