如果要發送gmail帳戶該如何做?
来源:6-2 邮件发送
精慕门_learner
2022-04-18 21:35:10
# coding:utf-8 import time import smtplib # python 自帶 import schedule # pip install schedule from email.mime.text import MIMEText # python自帶 from email.header import Header from email.mime.multipart import MIMEMultipart # 使用MIMEMultipart 對象 # 第三方的smtp mail_host = 'ssl://smtp.gmail.com:465' # 設置服務器 mail_user = 'husenior11123@gmail.com' # SMTP 帳號:[你的gmail帳號] mail_password = 'wdycjpatwlswsqdo' # SMTP 密碼:[google應用程式密碼] # smtp 开通, 授权码 sender = 'husenior11123@gmail.com' receivers = ['s1041026@gm.ncue.edu.tw'] # MIMEText(email_content, email_type, encoding_type) -定義郵件發送內容的對象 # message =MIMEText('這是一個測試', 'plain', 'utf-8') # 內容, 格式, 編碼格式 # message = MIMEText('<p style="color:red;">这是一个测试</p>', 'html', 'utf-8') # 發送html 類型文件 message = MIMEMultipart() # 實例化對象 message['From'] = Header(sender) message['Subject'] = Header('python脚本测试', 'utf-8') # subject -> Title # print(message.as_string()) # 定義發送的內容 -使用附件先將內容讀取 -> 定義附件類型(流類型) -> 對附件進行名稱定義 -> 把附件附加到message內 -> attr = MIMEText(open('send.py', 'rb').read(), 'base64', 'utf-8') attr['Content-Type'] = 'application/octet-stream' # 流的協議 attr['Content-Disposition'] = 'attachment;filename="send.py"' message.attach(attr) # 郵件附件添加完成 message.attach(MIMEText('这是一个带附件的邮件', 'plain', 'utf-8')) # 加入郵件主內容 # 郵件發送 def send(): try: # 使用try-catch來捕獲發送失敗 smtobj = smtplib.SMTP() # 實例化協議對象 smtobj.connect(mail_host, 465) # SMTP 埠號:465 smtobj.login(mail_user, mail_pass) smtobj.sendmail(sender, receivers, message.as_string()) # message.as_string() 加密字符串 except smtplib.SMTPException as e: print('error: %s' % e) if __name__ == '__main__': schedule.every(10).seconds.do(send) print('send start') while 1: # 為何要用while loop, 及time.sleep() -> 當使用run_pending()時, 它會監測是否有任務要執行, if not, finish # 所以要用while loop, 使其不斷的監測是否有任務要執行 schedule.run_pending() time.sleep(1) # 因為不停地監測, 頻率太高 -> 為了減少cpu消耗, 提高性能, 需要sleep ''' #message = MIMEText('<p style="color:red;">这是一个测试</p>', 'html', 'utf-8') message['From'] = Header(sender) message['Subject'] = Header('python脚本测试', 'utf-8') '''
報錯:
Traceback (most recent call last):
File "C:/Users/user/Desktop/python/auto/埭鎢/email/send.py", line 55, in <module>
schedule.run_pending()
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\schedule\__init__.py", line 780, in run_pending
default_scheduler.run_pending()
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\schedule\__init__.py", line 100, in run_pending
self._run_job(job)
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\schedule\__init__.py", line 172, in _run_job
ret = job.run()
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\schedule\__init__.py", line 661, in run
ret = self.job_func()
File "C:/Users/user/Desktop/python/auto/埭鎢/email/send.py", line 43, in send
smtobj.connect(mail_host, 465) # SMTP 埠號:465
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\smtplib.py", line 339, in connect
self.sock = self._get_socket(host, port, self.timeout)
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\smtplib.py", line 308, in _get_socket
return socket.create_connection((host, port), timeout,
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\socket.py", line 787, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\socket.py", line 918, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno 11001] getaddrinfo failed
1回答
时间,
2022-04-19
同学,你好!
1、socket.gaierror: [Errno 11001] getaddrinfo failed表示应用程序无法解析主机的IP地址。同学可以看下是否可以正常访问gmail邮箱
2、谷歌邮箱在国内是无法访问的,同学可以使用其他邮箱进行学习
祝学习愉快!
相似问题