Tìm kiếm


    Gửi Mail bằng Gmail API với Postman và ASP.NET Core | Phần 1


    Trong bài viết trước mình đã hướng dẫn các bạn cách gửi mail sử dụng SendGrid (Xem chi tiết TẠI ĐÂY).

    Tuy SendGrid hỗ trợ rất tốt nhưng nhược điểm của nó lại là mất phí và việc đăng ký tài khoản đôi khi còn khó khăn. Chính vì vậy hôm nay mình sẽ hướng dẫn các bạn gửi Mail bằng Gmail API hoàn toàn miễn phí của Google.

    Cụ thể mình sẽ hướng dẫn bằng Postman ASP.NET Core.

    Chuẩn Bị

    Các bạn cần chuẩn bị các đồ nghề sau:

    • - Tài khoản Gmail
    • - Postman (Download Tại Đây)
    • - .NET Core 6 (Download Tại Đây)
    • - Visual Studio 2022 hoặc Rider (Xem cách Crack Rider TẠI ĐÂY
    •  

    Tạo Client ID & Client Secret

    Chỗ này quan trọng các bạn làm theo từng bước như mình nhé

    Đầu tiên truy cập vào https://console.cloud.google.com/getting-started

    dsad

    Chọn Select a project -> New Project

    sad

    Nhập tên Project và nhận Create

    dsad

    Chọn Project vừa tạo rồi tìm kiếm Gmail API

    dsad

    Tại màn hình này các bạn chon Enable

    đấ

    Tiếp theo các bạn chon Oauth consent screen -> External -> Create

    Điền các thông tin cho mục Oauth consent screen.

    Lưu ý: App name không được chứa các tên các sản phẩm của Google. VD: Gmail, Google,...

    đá

    Mục Scopes các bạn chọn như hình trên nhé

    dsad

    Tiếp đến là tạo Client IDClient Secret ở mục Credentials -> OAuth client ID

    dá

    Tại màn hình này các bạn điền các thông tin giống như mình. Ở mục Authorized Redirect URIs các bạn để URL nào cũng được, kể cả Localhost vẫn đc nhé.

    Còn mình thì dùng đồ nhà bằng tên Website của mình luôn 😁

    asd

    Click vào icon download các bạn sẽ thấy Client IDClient Secret vừa tạo

    đấ

    Các bạn lưu 2 thông tin Client IDClient Secret lại để dùng sau.

    Bây giờ hãy Publish App như sau:

    dsa

    Lấy Access Code

    Để sử dụng được Gmail API thì trước hết chúng ta cần lấy được Access Token của tài khoản Gmail.

    Các bạn mở trình duyệt web lên và truy cấp vào URL cùng các tham số như sau:

    https://accounts.google.com/o/oauth2/auth?client_id=YOUR_CLIENT_ID&response_type=code&approval_prompt=force&access_type=offline&redirect_uri=YOUR_URI_REDIRECT&scope=https://mail.google.com/

    Chú ý thay thế:

    • - YOUR_CLIENT_ID: Client ID vừa tạo ở trên
    • - YOUR_URI_REDIRECT: Chình là Authorized Redirect URIs ở trên
    •  

    Để chắc chắn không copy và điền sai thông tin URL các bạn có thể sử dụng Tool URL Parser để Build URL bằng cách truy cập https://www.progcoder.com/tool/url-parser

    đá

    https://accounts.google.com/o/oauth2/auth?client_id=YOUR_CLIENT_ID&response_type=code&approval_prompt=force&access_type=offline&redirect_uri=YOUR_URI_REDIRECT&scope=https://mail.google.com/

    Paste URL trên vào mục thẻ Input -> Nhấn Parser -> Tại mục Query String Click button Edit -> Tiếp tục nhấn Build URL -> Cuối cùng hãy Copy lại URL ở phần Input.

    Mở trình duyệt web và truy cấp vào URL vừa Copy.

    dsa

    Chọn đúng tài khoản bạn vừa dùng để tạo ở trên nhá.

    đá

    Cảnh báo nhưng kệ cứ tiếp tục nhá các bạn

    đasad

    Tiếp tục xác nhận nhé.

    Sau khi nhấn tiếp tục và thành công Google sẽ Redirect bạn về đúng URI mà bạn đã cung cấp ở trên kèm với một mã code như sau

    đá

    Các bạn Copy mã Code và lưu lại.

    Tránh tình trạng Copy sai value phần code thì các bạn có thể truy cập Tool URL Parser tại https://www.progcoder.com/tool/url-parser và làm như bước trên 😅

    Lấy refresh_token

    Sau khi lấy được Access Code như ở trên. Các bạn sử dụng Postman để lấy refresh_token bằng URL với Method là POST:

    https://accounts.google.com/o/oauth2/token?client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&redirect_uri=https://www.progcoder.com&grant_type=authorization_code&code=YOUR_ACCESS_CODE

    Kết quả sau khi request:

    đá

    Các bạn lưu refresh_token lại nhá.

    Lấy access_token

    Tạo một request khác tới URL sau:

    https://accounts.google.com/o/oauth2/token?client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&refresh_token=YOUR_REFRESH_TOKEN&grant_type=refresh_token

    Method POST

    Kết quả trả về:

    đá

    Với response như trên thì chúng ta sẽ sử dụng access_token để có thể tao tác với Gmail API như Gửi, Đọc, Lấy Danh Sách Mail.

    Nhiều bạn sẽ thắc mắc là tại sao không sử dụng access_token ở bước Lấy refresh_token.

    Lý do là vì Access Code access_token chỉ có hiệu lực trong vòng 60 phút quá thời gian này cần tạo mới code và access_token mới để truy cập lại vào Gmail API. Chính vì vậy chúng ta cần lấy refresh_token trước và sử dụng nó để lấy access_token.

    Thao Tác Với Gmail bằng Postman

    Sau khi có access_token ở bước trên mình sẽ sử dụng để thao tác với Gmail. Các bạn có thể Download Collection và Import vào Postman của bạn để sử dụng nhé (Mình để ở cuối bài)

    Gửi Mail

    Có một lưu ý là phần Json Body khi gửi bằng Gmail API là thông tin gửi phải ở dạng String Base64. Ví dụ mình muốn gửi một email với nội dung và thôn tin như sau:

    MIME-Version: 1.0
    Content-type: text/html; charset=utf-8
    Content-Transfer-Encoding: base64
    From: ProG Coder 
    To: Test User 
    Subject: =?UTF-8?B?Test Send Mail?=
    
    This is test mail

    Chúng ta sẽ cần Convert chuỗi trên sang Base64 thì mới có thể gửi đi được.

    Mình có viết sẵn hàm Javascript để thực hiện việc này:

    function buildMessage(subject, senderName, receiverName, from, to, htmlContent) {
      // First, base64 encode the HTML content
      var base64HtmlContent = btoa(htmlContent);
      var inputBytes = unescape(encodeURIComponent(subject));
      var base64Subject = btoa(inputBytes)
        .replace(/\+/g, '-')
        .replace(/\//g, '_')
        .replace(/=+$/, '');
    
      // Then, create the MIME message
      var mimeMessage = [
        'MIME-Version: 1.0',
        'Content-type: text/html; charset=utf-8',
        'Content-Transfer-Encoding: base64',
        `From: ${senderName} <${from}>`,
        `To: ${receiverName} <${to}>`,
        `Subject: =?UTF-8?B?${base64Subject}?=`,
        '',
        base64HtmlContent
      ].join('\n');
    
      // Finally, base64url encode the entire MIME message
      var base64MimeMessage = btoa(mimeMessage)
        .replace(/\+/g, '-')
        .replace(/\//g, '_')
        .replace(/=+$/, '');
    
      return base64MimeMessage;
    }
    
    // Result: TUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC10eXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CkZyb206IFByb0cgQ29kZXIgPGRldnN0YXIub3JnQGdtYWlsLmNvbT4KVG86IFByb0cgQ29kZXIgVGVzdCA8cHJvZ2NvZGVyLmNvbUBnbWFpbC5jb20-ClN1YmplY3Q6ID0_VVRGLTg_Qj9WR1Z6ZENCVFpXNWtJRTFoYVd3Pz0KClBIQStWR2hwY3lCcGN5QjBaWE4wSUcxaGFXd3VJRk5sYm1RZ1lua2dVSEp2UnlCRGIyUmxjand2Y0Q0PQ

    Bây giờ mình sẽ thực hiện gửi mail tới account [email protected] với nội dung là This is test mail. Send by ProG Coder

    Json của mình sẽ có dạng sau:

    {    
       "raw": "TUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC10eXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CkZyb206IFByb0cgQ29kZXIgPGRldnN0YXIub3JnQGdtYWlsLmNvbT4KVG86IFByb0cgQ29kZXIgVGVzdCA8cHJvZ2NvZGVyLmNvbUBnbWFpbC5jb20-ClN1YmplY3Q6ID0_VVRGLTg_Qj9WR1Z6ZENCVFpXNWtJRTFoYVd3Pz0KClBIQStWR2hwY3lCcGN5QjBaWE4wSUcxaGFXd3VJRk5sYm1RZ1lua2dVSEp2UnlCRGIyUmxjand2Y0Q0PQ"
    }

    Để gửi Mail bằng Gmail API chúng ta sẽ request tới URL

    https://www.googleapis.com/gmail/v1/users/me/messages/send

    Với các thông số sau:

    • - Method: POST
    • - Request Header: Authorization: Bearer access_token
    • - Json Body: { "raw": "String_Base64" }
    •  

    dsa

    dsa

    Kết quả sau khi gửi thành công:

    dsad

    Kiểm tra hộp thư đến trong Gmail sẽ thấy

    đá

    Lấy danh sách Mail 

    Lấy danh sách Mail bằng bằng request tới URL:

    https://www.googleapis.com/gmail/v1/users/me/messages/

    Với các thông số sau:

    • - Method: GET
    • - Request Header: Authorization: Bearer access_token
    •  

    đâs

    Đọc Mail

    Request tới URL sau để đọc Mail:

    https://www.googleapis.com/gmail/v1/users/me/messages/EMAIL_ID

    Với các thông số sau:

    • - Method: GET
    • - Request Header: Authorization: Bearer access_token
    •  

    đá

    Thông tin chi tiết về mail sẽ được trả về như hình trên.

    Các bạn sẽ thấy phần nội dung của Mail nằm trong payload -> body -> data. Do nó ở dạng Base64 nên chúng ta cần convert ra dạng có thể đọc.

    Với Javascript các bạn có thể dụng hàm sau:

    function decodeHtmlContent(base64HtmlContent) {
      var base64 = base64HtmlContent
        .replace(/-/g, '+')
        .replace(/_/g, '/');
      var htmlContent = atob(base64);
      return htmlContent;
    }
    
    // Result: 

    Xem thêm các API khác của Gmail API tại https://developers.google.com/gmail/api/reference/rest/v1/users.messages/get

    Tạm kết

    Bài viết đến đây cũng khá dài rồi nên mình xin tạm dừng phần đầu tiên tại đây.

    Ở phần tiếp theo mình sẽ hướng dẫn các bạn sử dụng Code với C#, .NET Core để gửi mail sử dụng Gmail API.

    Các bạn nhớ theo dõi mình để không bỏ lỡ bài viết nào nhé

     


    Tiểu sử
    Are you one or zero?


    Bình luận