在.net中使用Gmail發送郵件

來源:互聯網
上載者:User
gmail|發送郵件

在項目開發中,發送郵件時一種非常常見的功能。一般的情況下,大型的公司都有自己的郵件系統,我們可以直接通過公司的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 = "from@gail.com";
        const string ADDRESS_TO = "to@gmail.com";
        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 為to@gmail.com發送郵件,雖然在SmtpClient.Send方法中的我指定的From address為from@gail.com,當收信人受到該郵件的時候,郵件的寄件者是MyAccount@gail.com,不會為from@gail.com。這些很有必要的,可以防止你利用別人的名義發送郵件。這種機制並不是通用的,我就和同事開過這樣的玩笑:通過公司的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="MyAccount@gmail.com">
        <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);
        }

 



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。