我可以發送純文本,但無法發送 html 格式的 html 文本。
import email, smtplib, ssl
import os
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
body = """
this is first mail by using python
"""
port_email = 587
smtp_server = "smtp.gmail.com"
password = "your password"
subject = "An email with attachment from Python"
sender_email = "[email protected]"
receiver_email = "[email protected]"
# Create a multipart message and set headers
message = MIMEMultipart()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = subject
message["Bcc"] = receiver_email # Recommended for mass emails
# Add body to email
message.attach(MIMEText(body, "plain"))
filename = "file name" # In same directory as script
with open(filename.html, 'r', encoding="utf-8") as attachment:
part1 = attachment.read()
part2 = MIMEText(part1, "html")
message.attach(part2)
text = message.as_string()
context = ssl.create_default_context()
with smtplib.SMTP_SSL(smtp_server, 465 , context=context) as server:
server.login(sender_email, password)
server.sendmail(sender_email, receiver_email, text)
這將發送附件,但我想在電子郵件正文中查看 html 文本。檔案名是內容 html 表,因此代碼應發送 html 文本,該文本將自動在帶有 html 表的 html 正文中可用。
uj5u.com熱心網友回復:
Mime 有多種格式。默認情況下MIMEMultipart構建多部分/混合訊息,這意味著一個簡單的文本正文和一堆附件。
當您想要正文的 HTML 表示時,您需要多部分/替代訊息:
...
message = MIMEMultipart('alternative')
...
但是您使用的是舊的 compat32 API。從 Python 3.6 開始,您最好使用email.message.EmailMessage...
uj5u.com熱心網友回復:
如果這不是你想要的,你為什么要傳遞一個假的身體?
您的代碼似乎是為 Python 3.5 或更早版本撰寫的。該email庫在 3.6 中進行了大修,現在更加通用和合乎邏輯。可能會扔掉你所擁有的,然后從檔案中的示例重新開始。email
這是一個簡短的嘗試。
from email.message import EmailMessage
...
message = EmailMessage()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = subject
# No point in using Bcc if the recipient is already in To:
with open(filename) as fp:
message.set_content(fp.read(), 'html')
# no need for a context if you are just using the default SSL
with smtplib.SMTP_SSL(smtp_server, 465) as server:
server.login(sender_email, password)
# Prefer the modern send_message method
server.send_message(message)
如果您想以純文本和 HTML 格式發送訊息,鏈接的示例將向您展示如何調整代碼以執行此操作,但實際上,text/plain正文部分實際上應該包含有用的訊息,而不僅僅是占位符。
如代碼中所述,Bcc:如果您已經在To:標頭中指定了收件人,則沒有理由使用。如果要使用Bcc:,則必須在To:標題中添加其他內容,通常是您自己的地址或地址串列,例如:undisclosed-recipients;
切線地,當打開一個檔案時,Python(或者實際上是作業系統)檢查用戶的當前作業目錄,而不是從中加載 Python 腳本的目錄。也許還可以看看當前作業目錄到底是什么?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/414731.html
標籤:
上一篇:獲取成功狀態AWSSES
