iT邦幫忙

2022 iThome 鐵人賽

DAY 4
0

目的

使用gmail寄信

同步更新於個人部落格
billhuang-MailKit

1.建立新專案

選擇ASP.NET Core Web API專案範本,並執行下一步
步驟1

2.設定新的專案

命名你的專案名稱,並選擇專案要存放的位置。
步驟2

3.其他資訊

直接進行下一步
步驟3

4.NuGet加入套件

  • Google.Apis.Auth(使用google信箱時需要做oauth驗證才可以使用)
  • MailKit(寄信)

步驟4

5.編輯WeatherForecastController檔案

將預設的API註解,寫入新的Action
步驟5-1

[HttpGet("SendEmail")]
    public async Task<IActionResult> Get() {
      #region OAuth驗證
      const string GMailAccount = "前置作業文章打上去的測試帳號";

      var clientSecrets = new ClientSecrets {
        ClientId = "前置作業文章最後給的用戶ID",
        ClientSecret = "前置作業文章最後給的用戶端密碼"
      };

      var codeFlow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer  {
        DataStore = new FileDataStore("CredentialCacheFolder", false),
        Scopes = new[] { "https://mail.google.com/" },
        ClientSecrets = clientSecrets
      });

      var codeReceiver = new LocalServerCodeReceiver();
      var authCode = new AuthorizationCodeInstalledApp(codeFlow, codeReceiver);

      var credential = await authCode.AuthorizeAsync(GMailAccount, CancellationToken.None);

      if (credential.Token.IsExpired(SystemClock.Default))
        await credential.RefreshTokenAsync(CancellationToken.None);

      var oauth2 = new SaslMechanismOAuth2(credential.UserId, credential.Token.AccessToken);
      #endregion

      #region 信件內容
      var message = new MimeMessage();
      //寄件者名稱及信箱(信箱是測試帳號)
      message.From.Add(new MailboxAddress("bill", "xxxx@gmail.com"));
      //收件者名稱,收件者信箱
      message.To.Add(new MailboxAddress("billhuang", "xxxx@gmail.com"));
      //信件標題
      message.Subject = "How you doing'?";
      //信件內容
      message.Body = new TextPart("plain") {
        Text = @"This is test"
      };
      using (var client = new SmtpClient()) {
        await client.ConnectAsync("smtp.gmail.com", 587);
        await client.AuthenticateAsync(oauth2);
        await client.SendAsync(message);
        await client.DisconnectAsync(true);
      } 
      #endregion

      return Ok("OK");
    }

步驟5-2

6.執行結果

F5執行後,依照下列步驟操作,最後看到OK後,就可以去信箱確認有沒有收到信了。

  • 第一步
    步驟6-1
  • 第二步
    步驟6-2
  • 第三步
    步驟6-3

補充

MailKit為基於MimeKit解析器的客戶端函式庫
MimeKit為解析器,用於解析電子郵件格式

參考

官方網站
官方GmailOauth2範例
Gmail教學

範例檔

GitHub


上一篇
[.net 6] MailKit前置作業
下一篇
[.net 6] Automapper範例
系列文
.net6套件入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
ruhui0726
iT邦新手 4 級 ‧ 2022-09-19 13:17:10

加油/images/emoticon/emoticon42.gif

我要留言

立即登入留言