Làm cách nào để gửi email với Gmail là nhà cung cấp bằng Python?


289

Tôi đang cố gắng gửi email (Gmail) bằng python, nhưng tôi gặp lỗi sau.

Traceback (most recent call last):  
File "emailSend.py", line 14, in <module>  
server.login(username,password)  
File "/usr/lib/python2.5/smtplib.py", line 554, in login  
raise SMTPException("SMTP AUTH extension not supported by server.")  
smtplib.SMTPException: SMTP AUTH extension not supported by server.

Kịch bản Python là như sau.

import smtplib
fromaddr = 'user_me@gmail.com'
toaddrs  = 'user_you@gmail.com'
msg = 'Why,Oh why!'
username = 'user_me@gmail.com'
password = 'pwd'
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()

16
Câu hỏi này cần được mở khóa ngay bây giờ khi google chuyển sang API nội bộ để gửi tin nhắn qua gmail. Động thái này làm cho tất cả trừ một trong những câu trả lời này trở nên lỗi thời, và câu trả lời có liên quan là rất nhẹ để thực sự giải quyết vấn đề.
Andrew

Ngoài ra, đối với người dùng VPN, nếu sự cố vẫn còn, hãy tắt VPN của bạn. Điều đó làm việc cho tôi.
Paul

Câu trả lời:


211

Bạn cần nói EHLOtrước khi chạy thẳng vào STARTTLS:

server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()

Ngoài ra bạn thực sự cần tạo From:, To:Subject:tiêu đề thư, tách ra khỏi nội dung thư bằng một dòng trống và sử dụng CRLFnhư dấu EOL.

Ví dụ

msg = "\r\n".join([
  "From: user_me@gmail.com",
  "To: user_you@gmail.com",
  "Subject: Just a message",
  "",
  "Why, oh why"
  ])

2
gọi server.sendmail (fromaddr, toaddrs, messenger) tham số thứ hai, toaddrs phải là một danh sách, toaddrs = ['user_me@gmail.com']
Massimo Fazzolari

14
Kể từ tháng 8 năm 2014, giờ đây đã tăng smtplib.SMTPAuthenticationError: (534, '5.7.9 Mật khẩu dành riêng cho ứng dụng.
anon58192932

7
Mặc dù vậy, đối với tôi, tôi đã phải kích hoạt mật khẩu 'ứng dụng' để đăng nhập bằng tài khoản @google để gửi email qua python: support.google.com.vn/accounts(/
anon58192932

1
Đây là một liên kết về cách gửi thư cho nhiều người: stackoverflow.com/questions/8856117/ cấp
anon58192932

1
Tôi đã từng đăng nhập vào máy chủ SMTP bằng telnet và gửi EHLObằng lỗi đánh máy. Sau khi tôi đã thử Helo nhiều lần nhưng phản hồi thì khác. Phải mất nhiều giờ để nhận ra rằng EHLO thực sự là một lệnh mà SMTP hiểu và tôi đã đánh máy.
Shiplu Mokaddim

297
def send_email(user, pwd, recipient, subject, body):
    import smtplib

    FROM = user
    TO = recipient if isinstance(recipient, list) else [recipient]
    SUBJECT = subject
    TEXT = body

    # Prepare actual message
    message = """From: %s\nTo: %s\nSubject: %s\n\n%s
    """ % (FROM, ", ".join(TO), SUBJECT, TEXT)
    try:
        server = smtplib.SMTP("smtp.gmail.com", 587)
        server.ehlo()
        server.starttls()
        server.login(user, pwd)
        server.sendmail(FROM, TO, message)
        server.close()
        print 'successfully sent the mail'
    except:
        print "failed to send mail"

nếu bạn muốn sử dụng Cổng 465, bạn phải tạo một SMTP_SSLđối tượng:

# SMTP_SSL Example
server_ssl = smtplib.SMTP_SSL("smtp.gmail.com", 465)
server_ssl.ehlo() # optional, called by login()
server_ssl.login(gmail_user, gmail_pwd)  
# ssl server doesn't support or need tls, so don't call server_ssl.starttls() 
server_ssl.sendmail(FROM, TO, message)
#server_ssl.quit()
server_ssl.close()
print 'successfully sent the mail'

2
Rất đẹp mẫu cảm ơn. Một suy nghĩ tôi nhận thấy là nếu tôi muốn sử dụng kết nối SSL, tôi phải xóa server.starttls ()
Dowlers

18
Thật không may làm việc nữa thật đáng tiếc: smtplib.SMTPAuthenticationError: (534, '5.7,14 < Tài khoản https: ... Vui lòng đăng nhập qua trình duyệt web của bạn và \ n5.7.14 sau đó thử lại. \ N5.7.14 Tìm hiểu nhiều hơn tại \ n5.7,14 support.google.com.vn/mail/48878754 ... Sau đó tôi nhận được thư từ google, rằng đã có một nỗ lực kết nối đáng ngờ.
royskatt

13
@royskatt - tất cả những gì bạn cần làm là tạo mật khẩu ứng dụng và sử dụng nó thay cho mật khẩu tài khoản của bạn. Tạo mật khẩu ứng dụng tại đây: security.google.com.vn/sinstall/security/apppasswords
Jared

15
@royskatt: Tôi vừa có một bản sửa lỗi cho vấn đề bạn gặp phải. Google có một cài đặt để cho phép truy cập các ứng dụng kém an toàn hơn mà bạn chỉ cần bật 'Bật'. bạn có thể đến đó từ: Google -> tài khoản của tôi -> Đăng nhập & bảo mật -> Ứng dụng và trang web được kết nối -> cuộn xuống và bạn sẽ tìm thấy 'Cho phép các ứng dụng kém an toàn hơn'
shaleen mohan ngày 7/8/2015

2
Nếu gmail của bạn được bảo mật bằng Xác thực hai yếu tố, trước tiên bạn phải tạo mật khẩu dành riêng cho ứng dụng -> sau đó sử dụng mật khẩu ứng dụng đó cho mã ví dụ trên (điều này rất quan trọng vì sau đó bạn không ghi mật khẩu của mình xuống bất cứ đâu trong Cleartext VÀ bạn có thể thu hồi mật khẩu ứng dụng bất cứ lúc nào).
Trevor Boyd Smith

136

Tôi gặp phải một vấn đề tương tự và vấp phải câu hỏi này. Tôi đã gặp Lỗi Xác thực SMTP nhưng tên người dùng / thẻ của tôi là chính xác. Đây là những gì đã sửa nó. Tôi đọc cái này:

https://support.google.com/accountsals/6010255

Tóm lại, google không cho phép bạn đăng nhập thông qua smtplib vì nó đã gắn cờ loại đăng nhập này là "kém an toàn", vì vậy, những gì bạn phải làm là truy cập liên kết này trong khi bạn đăng nhập vào tài khoản google của mình, và cho phép truy cập:

https://www.google.com.vn/sinstall/security/lesssecur xuất hiện lại

Khi đã được đặt (xem ảnh chụp màn hình của tôi bên dưới), nó sẽ hoạt động.

nhập mô tả hình ảnh ở đây

Đăng nhập ngay bây giờ hoạt động:

smtpserver = smtplib.SMTP("smtp.gmail.com", 587)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo()
smtpserver.login('me@gmail.com', 'me_pass')

Phản hồi sau khi thay đổi:

(235, '2.7.0 Accepted')

Trả lời trước:

smtplib.SMTPAuthenticationError: (535, '5.7.8 Username and Password not accepted. Learn more at\n5.7.8 http://support.google.com/mail/bin/answer.py?answer=14257 g66sm2224117qgf.37 - gsmtp')

Vẫn không làm việc? Nếu bạn vẫn nhận được SMTPAuthenticationError nhưng bây giờ mã là 534, vì đó là vị trí không xác định. Theo liên kết này:

https://accounts.google.com/DisplayUnlockCaptcha

Nhấp vào tiếp tục và điều này sẽ cung cấp cho bạn 10 phút để đăng ký ứng dụng mới của bạn. Vì vậy, tiến hành thực hiện một nỗ lực đăng nhập khác bây giờ và nó sẽ hoạt động.

CẬP NHẬT : Điều này dường như không hoạt động ngay lập tức, bạn có thể bị kẹt trong một thời gian nhận được lỗi này trong smptlib:

235 == 'Authentication successful'
503 == 'Error: already authenticated'

Thông báo cho biết sử dụng trình duyệt để đăng nhập:

SMTPAuthenticationError: (534, '5.7.9 Please log in with your web browser and then try again. Learn more at\n5.7.9 https://support.google.com/mail/bin/answer.py?answer=78754 qo11sm4014232igb.17 - gsmtp')

Sau khi bật 'lesssecurures', hãy đi uống cà phê, quay lại và thử lại liên kết 'DisplayUnlockCaptcha'. Từ trải nghiệm người dùng, có thể mất tới một giờ để thay đổi bắt đầu. Sau đó thử lại quy trình đăng nhập.


3
VÂNG, CẢM ƠN ! Đã xảy ra trong khi sử dụng bình-mail
Giannis

1
cảm ơn người đàn ông chỉ có vấn đề với tôi: Tài
khoản.google.com/DisplayUnlockCaptcha

6
Ngoài ra, vui lòng để lại nửa giờ đến một giờ để cài đặt thay đổi. Tôi đã tạo một tài khoản mới, vô hiệu hóa tất cả các bảo mật được thêm và vẫn gặp lỗi tương tự. Khoảng một giờ sau, tất cả đã hoạt động.
jkgeyti

2
Không thể kích hoạt các ứng dụng kém an toàn hơn nếu bạn bật "Xác minh 2 bước". Tùy chọn tốt nhất và an toàn nhất là bật "apppassword" security.google.com.vn/sinstall/security/apppasswords như đã đề xuất và nó hoạt động như một bùa mê
Omiod

2
Khi tôi theo liên kết apppasswords, tất cả các tài khoản Google của tôi đều gặp lỗi "Cài đặt bạn đang tìm kiếm không khả dụng cho tài khoản của bạn".
Suzanne

18

Bạn thất vọng với OOP?

#!/usr/bin/env python


import smtplib

class Gmail(object):
    def __init__(self, email, password):
        self.email = email
        self.password = password
        self.server = 'smtp.gmail.com'
        self.port = 587
        session = smtplib.SMTP(self.server, self.port)        
        session.ehlo()
        session.starttls()
        session.ehlo
        session.login(self.email, self.password)
        self.session = session

    def send_message(self, subject, body):
        ''' This must be removed '''
        headers = [
            "From: " + self.email,
            "Subject: " + subject,
            "To: " + self.email,
            "MIME-Version: 1.0",
           "Content-Type: text/html"]
        headers = "\r\n".join(headers)
        self.session.sendmail(
            self.email,
            self.email,
            headers + "\r\n\r\n" + body)


gm = Gmail('Your Email', 'Password')

gm.send_message('Subject', 'Message')

33
Nếu lớp của bạn chỉ có hai phương thức, một trong số đó là __init__, chỉ cần sử dụng một hàm.
JoeQuery

Làm thế nào bạn sẽ thêm một tập tin đính kèm bằng phương pháp này?
sgerbhctim

Sử dụng một lớp sẽ tốt nếu bạn muốn khởi tạo ứng dụng khách và chuyển nó qua các phần khác của mã, thay vì chuyển qua email và mật khẩu. Hoặc nếu bạn muốn gửi một số tin nhắn mà không gửi email và mật khẩu mỗi lần.
Sami bắt đầu

15

Những công việc này

Tạo mật khẩu ứng dụng Gmail!

Sau khi bạn tạo nó, sau đó tạo một tập tin gọi là sendgmail.py

Sau đó thêm mã này :

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# =============================================================================
# Created By  : Jeromie Kirchoff
# Created Date: Mon Aug 02 17:46:00 PDT 2018
# =============================================================================
# Imports
# =============================================================================
import smtplib

# =============================================================================
# SET EMAIL LOGIN REQUIREMENTS
# =============================================================================
gmail_user = 'THEFROM@gmail.com'
gmail_app_password = 'YOUR-GOOGLE-APPLICATION-PASSWORD!!!!'

# =============================================================================
# SET THE INFO ABOUT THE SAID EMAIL
# =============================================================================
sent_from = gmail_user
sent_to = ['THE-TO@gmail.com', 'THE-TO@gmail.com']
sent_subject = "Where are all my Robot Women at?"
sent_body = ("Hey, what's up? friend!\n\n"
             "I hope you have been well!\n"
             "\n"
             "Cheers,\n"
             "Jay\n")

email_text = """\
From: %s
To: %s
Subject: %s

%s
""" % (sent_from, ", ".join(sent_to), sent_subject, sent_body)

# =============================================================================
# SEND EMAIL OR DIE TRYING!!!
# Details: http://www.samlogic.net/articles/smtp-commands-reference.htm
# =============================================================================

try:
    server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
    server.ehlo()
    server.login(gmail_user, gmail_app_password)
    server.sendmail(sent_from, sent_to, email_text)
    server.close()

    print('Email sent!')
except Exception as exception:
    print("Error: %s!\n\n" % exception)

Vì vậy, nếu bạn thành công, sẽ thấy một hình ảnh như thế này:

Tôi đã kiểm tra bằng cách gửi email từ và cho chính mình.

Gửi email thành công.

Lưu ý: Tôi đã bật Xác minh 2 bước trên tài khoản của mình. Mật khẩu ứng dụng hoạt động với điều này! (đối với thiết lập gmail smtp, bạn phải truy cập https://support.google.com/accountsals/185833?hl=vi và làm theo các bước dưới đây)

Cài đặt này không khả dụng cho các tài khoản được bật Xác minh 2 bước. Những tài khoản này yêu cầu mật khẩu dành riêng cho ứng dụng để truy cập ứng dụng kém an toàn hơn.

Truy cập ứng dụng ít an toàn hơn ... Cài đặt này không khả dụng cho các tài khoản được bật Xác minh 2 bước.


1
Giải pháp tuyệt vời và giải thích rất tốt trong mã. Cảm ơn Jay, đánh giá cao. Câu hỏi ngớ ngẩn: bạn có biết giới hạn tối đa của email mỗi ngày có thể được gửi (với gmail) không?
Angelo

Cảm ơn bạn @Angelo nhưng vâng, có giới hạn, GMail = 500 email hoặc 500 người nhận / ngày giới thiệu: support.google.com.vn/mail/2/23939 SU SU khác nhau và có 2000 tin nhắn / ngày và có thể tìm thấy ở đây: hỗ trợ .google.com / a / answer / 166852 Chúc may mắn!
JayRizzo

2
Tất cả những người khác là bài viết cũ hơn và có thể không hoạt động, nhưng điều này là 100% làm việc. Tạo mật khẩu ứng dụng. Cảm ơn câu trả lời
Shubh

1
Tôi hơi ngạc nhiên khi giải pháp này không có nhiều upvote. Tôi đã không thử tất cả những cái khác, nhưng tôi đã thử một vài cái, và chỉ cái này hoạt động được, với 0 mày mò.
mcouthon

14

Bạn có thể tìm thấy nó ở đây: http://jayrambhia.com/blog/send-emails-USE-python

smtp_host = 'smtp.gmail.com'
smtp_port = 587
server = smtplib.SMTP()
server.connect(smtp_host,smtp_port)
server.ehlo()
server.starttls()
server.login(user,passw)
fromaddr = raw_input('Send mail by the name of: ')
tolist = raw_input('To: ').split()
sub = raw_input('Subject: ')

msg = email.MIMEMultipart.MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = email.Utils.COMMASPACE.join(tolist)
msg['Subject'] = sub  
msg.attach(MIMEText(raw_input('Body: ')))
msg.attach(MIMEText('\nsent via python', 'plain'))
server.sendmail(user,tolist,msg.as_string())

2
cộng 1 vì xây dựng MIME tốt hơn là mã hóa chuỗi định dạng của riêng bạn. MIMEMultipart có cần thiết cho một tin nhắn văn bản đơn giản không? Hoặc cũng đúng như sau: stackoverflow.com/a/6270987/895245
Ciro Santilli 冠状 病 六四 事件 法轮功

Nơi nào bạn khởi tạo biến email?
madcat

11

Không liên quan trực tiếp nhưng vẫn đáng để chỉ ra là gói của tôi cố gắng gửi tin nhắn gmail thực sự nhanh chóng và không gây đau đớn. Nó cũng cố gắng duy trì một danh sách các lỗi và cố gắng chỉ ra giải pháp ngay lập tức.

Nó thực sự chỉ cần mã này để làm chính xác những gì bạn đã viết:

import yagmail
yag = yagmail.SMTP('user_me@gmail.com')
yag.send('user_you@gmail.com', 'Why,Oh why!')

Hoặc một lớp lót:

yagmail.SMTP('user_me@gmail.com').send('user_you@gmail.com', 'Why,Oh why!')

Đối với gói / cài đặt, vui lòng xem git hoặc pip , có sẵn cho cả Python 2 và 3.


9

Đây là một ví dụ về API của Gmail. Mặc dù phức tạp hơn, đây là phương pháp duy nhất tôi thấy hoạt động vào năm 2019. Ví dụ này được lấy và sửa đổi từ:

https://developers.google.com/gmail/api/guides/seinating

Bạn sẽ cần tạo một dự án với các giao diện API của Google thông qua trang web của họ. Tiếp theo, bạn sẽ cần bật API GMAIL cho ứng dụng của mình. Tạo thông tin đăng nhập và sau đó tải xuống các khoản tín dụng đó, lưu nó dưới dạng certs.json.

import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

from email.mime.text import MIMEText
import base64

#pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

# If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://www.googleapis.com/auth/gmail.readonly', 'https://www.googleapis.com/auth/gmail.send']

def create_message(sender, to, subject, msg):
    message = MIMEText(msg)
    message['to'] = to
    message['from'] = sender
    message['subject'] = subject

    # Base 64 encode
    b64_bytes = base64.urlsafe_b64encode(message.as_bytes())
    b64_string = b64_bytes.decode()
    return {'raw': b64_string}
    #return {'raw': base64.urlsafe_b64encode(message.as_string())}

def send_message(service, user_id, message):
    #try:
    message = (service.users().messages().send(userId=user_id, body=message).execute())
    print( 'Message Id: %s' % message['id'] )
    return message
    #except errors.HttpError, error:print( 'An error occurred: %s' % error )

def main():
    """Shows basic usage of the Gmail API.
    Lists the user's Gmail labels.
    """
    creds = None
    # The file token.pickle stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server(port=0)
        # Save the credentials for the next run
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)

    service = build('gmail', 'v1', credentials=creds)

    # Example read operation
    results = service.users().labels().list(userId='me').execute()
    labels = results.get('labels', [])

    if not labels:
        print('No labels found.')
    else:
        print('Labels:')
    for label in labels:
        print(label['name'])

    # Example write
    msg = create_message("from@gmail.com", "to@gmail.com", "Subject", "Msg")
    send_message( service, 'me', msg)

if __name__ == '__main__':
    main()

smtplib không hoàn toàn an toàn cho chuỗi, vì vậy nó sẽ gặp vấn đề khi gửi tin nhắn đồng thời. Đây là cách tiếp cận đúng.
DSbajna

2

Hiện tại đã có API gmail, cho phép bạn gửi email, đọc email và tạo bản nháp qua REST. Không giống như các cuộc gọi SMTP, nó không chặn có thể là một điều tốt cho các máy chủ web dựa trên luồng gửi email trong luồng yêu cầu (như máy chủ web python). API cũng khá mạnh mẽ.

  • Tất nhiên, email nên được gửi đến một hàng đợi không phải là máy chủ web, nhưng thật tuyệt khi có các tùy chọn.

Dễ dàng cài đặt nhất nếu bạn có quyền quản trị viên Google Apps trên miền, bởi vì sau đó bạn có thể cấp quyền cho khách hàng của mình. Nếu không, bạn phải sử dụng xác thực và cho phép OAuth.

Đây là một ý chính chứng minh điều đó:

https://gist.github.com/timrichardson/1154e29174926e462b7a


2

câu trả lời tuyệt vời từ @David, ở đây dành cho Python 3 mà không cần dùng thử chung - ngoại trừ:

def send_email(user, password, recipient, subject, body):

    gmail_user = user
    gmail_pwd = password
    FROM = user
    TO = recipient if type(recipient) is list else [recipient]
    SUBJECT = subject
    TEXT = body

    # Prepare actual message
    message = """From: %s\nTo: %s\nSubject: %s\n\n%s
    """ % (FROM, ", ".join(TO), SUBJECT, TEXT)

    server = smtplib.SMTP("smtp.gmail.com", 587)
    server.ehlo()
    server.starttls()
    server.login(gmail_user, gmail_pwd)
    server.sendmail(FROM, TO, message)
    server.close()

2

Cho phép các ứng dụng kém an toàn hơn trên tài khoản gmail của bạn và sử dụng (Python> = 3.6):

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

gmailUser = 'XXXXX@gmail.com'
gmailPassword = 'XXXXX'
recipient = 'XXXXX@gmail.com'

message = f"""
Type your message here...
"""

msg = MIMEMultipart()
msg['From'] = f'"Your Name" <{gmailUser}>'
msg['To'] = recipient
msg['Subject'] = "Subject here..."
msg.attach(MIMEText(message))

try:
    mailServer = smtplib.SMTP('smtp.gmail.com', 587)
    mailServer.ehlo()
    mailServer.starttls()
    mailServer.ehlo()
    mailServer.login(gmailUser, gmailPassword)
    mailServer.sendmail(gmailUser, recipient, msg.as_string())
    mailServer.close()
    print ('Email sent!')
except:
    print ('Something went wrong...')

1
Câu trả lời thực sự tuyệt vời. Tốt nhất một trong các bó, siêu súc tích. Cảm ơn bạn.
Bruce Dean

Cảm ơn Pedro, câu trả lời của bạn đã giải quyết nó. Btw cho bất cứ ai sử dụng Gsuite với nhiều bí danh; chỉ cần thêm bí danh vào tài khoản gmail của bạn sau đây support.google.com/mail/answer/22370?hl=en và bạn có thể gửi bằng cách sử dụng bí danh bằng cách thay thế <{gmailUser}>với <YourAlias>.
LucSpan

1

Có vẻ như vấn đề của cũ smtplib. Trong python2.7mọi thứ hoạt động tốt.

Cập nhật : Yep, server.ehlo()cũng có thể giúp đỡ.


-1
    import smtplib

    fromadd='from@gmail.com'
    toadd='send@gmail.com'

    msg='''hi,how r u'''
    username='abc@gmail.com'
    passwd='password'

    try:
        server = smtplib.SMTP('smtp.gmail.com:587')
        server.ehlo()
        server.starttls()
        server.login(username,passwd)

        server.sendmail(fromadd,toadd,msg)
        print("Mail Send Successfully")
        server.quit()

   except:
        print("Error:unable to send mail")

   NOTE:https://www.google.com/settings/security/lesssecureapps that                                                         should be enabled

Tôi đang đăng mã đơn giản sẽ làm cách gửi thư từ tài khoản Gmail. Nếu bạn cần bất kỳ thông tin thì hãy cho tôi biết. Tôi hy vọng rằng mã sẽ giúp tất cả người dùng.
Shyam Gupta

-2
import smtplib
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.login("fromaddress", "password")
msg = "HI!"
server.sendmail("fromaddress", "receiveraddress", msg)
server.quit()

mã đơn giản để gửi thư qua gmail bằng mã python. từ địa chỉ là gmailID của bạn và người nhận là id mail mà bạn gửi mail.
Sam Divya Kumar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.