paint-brush
Cách đọc email Gmail với nhà viết kịchtừ tác giả@bormando
5,123 lượt đọc
5,123 lượt đọc

Cách đọc email Gmail với nhà viết kịch

từ tác giả Dmitrii Bormotov5m2023/12/10
Read on Terminal Reader

dài quá đọc không nổi

Đọc email trong các bài kiểm tra tự động là một thủ thuật mà bạn có thể cần biết cách thực hiện trong nhiều dự án. Đó là điều khó thực hiện nhưng không phải là không thể thực hiện được. Tài liệu và thư viện của nó không thực sự thân thiện với người dùng (đặc biệt đối với những người không làm việc nhiều với việc kiểm tra email). Gói npm gmail-getter giúp bạn tạo mã thông báo truy cập API REST của Gmail, nhận email của bạn và hiển thị chúng trong trình duyệt.
featured image - Cách đọc email Gmail với nhà viết kịch
Dmitrii Bormotov HackerNoon profile picture

Xin chào tất cả mọi người!


Đọc email trong các bài kiểm tra tự động là một thủ thuật mà bạn có thể cần biết cách thực hiện trong nhiều dự án. Đây là lý do và cách giải quyết nó…

Sao nó lại quan trọng?

Chà, nếu hệ thống gửi email - bạn có thể muốn xác minh rằng chúng đang được gửi và nội dung đúng, bao gồm cả các liên kết có thể nhấp vào.


Vì vậy, đây là những tình huống thông thường khi bạn cần điều này:

  1. Đăng ký.

    Rất nhiều nền tảng gửi email xác nhận sau khi bạn tạo tài khoản và bạn cần nhấp vào liên kết xác nhận từ email.


  2. Hóa đơn.

    Nếu ứng dụng của bạn thực hiện bất kỳ khoản thanh toán nào - họ thường gửi séc hoặc hóa đơn qua email, vì vậy bạn cũng có thể muốn xem liệu nội dung của họ có chính xác hay không.


  3. Kết quả.

    Giống như kết quả xét nghiệm y tế. Theo kinh nghiệm của tôi - một số bệnh viện gửi email kèm theo kết quả xét nghiệm sau khi hoàn thành (hoặc ít nhất là một liên kết đến trang cá nhân nơi bạn có thể xem báo cáo).



Tất nhiên, đây không phải là danh sách đầy đủ - đây chỉ là những trường hợp sử dụng mà tôi gặp nhiều nhất trong sự nghiệp của mình.


Việc không xác minh các trường hợp này có thể dẫn đến việc người dùng không nhận được email hoặc nhận được thông tin sai trong email. Trong một trong các dự án, nó đã giúp chúng tôi tìm thấy sớm mã thông báo SendGrind đã hết hạn.

Sự phức tạp của việc đọc email trong các bài kiểm tra là gì?

Đọc email là một việc khó nhưng không phải là không thể.


Các ứng dụng email ban đầu sử dụng POP3 để tìm nạp email từ máy chủ nhưng có một vấn đề nhỏ - nó sẽ xóa email khỏi máy chủ sau khi chúng được tải xuống.


Sau đó, giao thức IMAP xuất hiện - nó cho phép bạn chỉ cần đọc email từ máy chủ.


Vấn đề là - một số dịch vụ cấm các giao thức này hoặc bắt bạn xác nhận danh tính của mình khi bạn kết nối lần đầu tiên (chẳng hạn như khi bạn khởi động lại quá trình kiểm tra tự động).


Mặt khác, một số dịch vụ như Gmail cung cấp API REST để thao tác email của bạn, nhưng có một vấn đề khác - tài liệu và thư viện của nó không thực sự thân thiện với người dùng (đặc biệt đối với những người không làm việc nhiều với việc kiểm tra email).


Đây là lúc gmail-getter xuất hiện - một thư viện npm cho phép bạn đọc email và thậm chí mở chúng trong trình duyệt nếu bạn sử dụng các công cụ tự động hóa trình duyệt như Playwright .

Đọc email Gmail bằng Gmail-Getter

Điều đầu tiên trước tiên - bạn cần cài đặt gói trong dự án của mình:

 npm install gmail-getter

Tạo dự án Google Cloud Console và lấy thông tin xác thực

Để đăng nhập vào API Gmail, bạn cần có thông tin xác thực: ID khách hàng , Bí mật khách hàngMã thông báo làm mới . Những thông tin xác thực này cho phép bạn nhận được mã thông báo Truy cập, được yêu cầu trong các yêu cầu tiếp theo (chẳng hạn như nhận danh sách email hoặc một email, v.v.).


Các bước để đi:

  1. Tạo một dự án trong Google Cloud Console .


  2. Tạo thông tin xác thực OAuth trong phần API & Dịch vụ ( tốt nhất là chọn Ứng dụng dành cho máy tính để bàn ở đó nếu bạn cần để kiểm tra tự động ) và tải xuống.


  3. Kích hoạt API Gmail .


  4. Nhận mã thông báo Làm mới.


Để nhận mã thông báo Làm mới - chỉ cần thực hiện lệnh trong thư mục gốc của dự án:

 npx gmail-getter get-refresh-token


(hoặc bất cứ nơi nào khác nếu bạn đã cài đặt gói trên toàn cầu)

 get-refresh-token


Bạn phải đặt tệp credentials.json ở nơi bạn sẽ thực thi lệnh.


⚠️ tên tệp thông tin xác thực có phân biệt chữ hoa chữ thường ⚠️

Nhận mã thông báo truy cập

Sau khi cấu hình xong, bạn phải nhận được mã thông báo Access trong các thử nghiệm tự động của mình. Tôi muốn nói rằng nơi tốt nhất cho nó là thiết lập toàn cục (một chức năng thực thi trước khi quá trình chạy thử bắt đầu).


Vì vậy, nó sẽ giống như thế này:


 import {getToken} from 'gmail-getter' export default async function globalSetup() { process.env['ACCESS_TOKEN'] = await getToken( process.env.CLIENT_ID!, process.env.CLIENT_SECRET!, process.env.REFRESH_TOKEN! ) }


Ví dụ trên sử dụng các biến môi trường, vì vậy bạn chắc chắn cũng sẽ cần phải cài đặt gói dotenv .


Tuy nhiên, nếu bạn muốn mọi thứ đơn giản - bạn có thể sử dụng đoạn mã này ở bất cứ nơi nào bạn cần mã thông báo để có thể truy cập được từ đó:


 const accessToken = await getToken( '<put-your-client-id-here>', '<put-your-client-secret-here>', '<put-your-refresh-token-here>' )

Nhận email

Hiện tại, API REST của Gmail sử dụng ngôn ngữ truy vấn riêng để tìm email bạn cần:


 const email = await checkInbox(accessToken!, 15000, 1500, 'from:squier7 subject:Test!')


Lệnh trên trả về cho bạn một đối tượng email nhưng bạn vẫn cần lấy nội dung hoặc liên kết của nó. Thay thế from:squier7 subject:Test! vào truy vấn của riêng bạn theo cú pháp từ liên kết ở trên ☝️


Bạn có thể phân tích một liên kết bằng biểu thức chính quy :


 const link = parseLinkFromHtml(email!, /(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im)


Thay thế /(https:\/\/)(\S*)(gmail-getter)([\w\/\?\=\-]*)/im bằng biểu thức chính quy của riêng bạn ☝️


HOẶC lấy toàn bộ nội dung HTML của email và hiển thị nó trong trình duyệt của bạn:


 import {getToken, parseHtml} from 'gmail-getter' import {test} from '@playwright/test' test('Render an email', async ({page}) => { const accessToken = await getToken( '<put-your-client-id-here>', '<put-your-client-secret-here>', '<put-your-refresh-token-here>' ) const email = await checkInbox(accessToken!, 15000, 1500, 'from:squier7 subject:Test!') // get an email const html = parseHtml(email!) // parse HTML from the email await page.setContent(html) // render the email in the browser })

Tổng thể

Tôi nghĩ khá rõ ràng rằng làm việc với email trong các bài kiểm tra tự động có thể khó khăn! Nhưng biết những thủ thuật này sẽ khiến mọi việc trở nên dễ dàng hơn nhiều.


Bạn vẫn có thể sử dụng một số dịch vụ email khác hoặc thử IMAP , nhưng tôi đảm bảo với bạn - việc này sẽ không dễ dàng như trong hướng dẫn này vì bạn cần tạo một công cụ trợ giúp của riêng mình, chẳng hạn như gmail-getter được cung cấp đây.


Bạn có thể tìm thấy ví dụ về Nhà viết kịch trên GitHub . Ví dụ về cây bách cũng vậy.