使用smtp python发送电子邮件,def块出现问题

2024-05-15 01:19:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,我正在使用python 3。我需要发送一封包含生成消息的电子邮件。消息一切正常(我可以打印),但不知怎么的,在这种配置下,def阻止了电子邮件的发送。我做错了什么?我没有收到任何错误通知

import random
import string
import smtplib

port = 2525 
smtp_server = "smtp.mailtrap.io"
login = "my mailtrap login"
password = "my mailtrap pass"

sender = "from@smtp.mailtrap.io"
receiver = "to@smtp.mailtrap.io"

def randomString(stringLength=10):
    letters = string.ascii_lowercase
    return ''.join(random.choice(letters) for i in range(stringLength))

def randomMessage():
    random_string1 = randomString()
    random_string2 = randomString()

    message = f"""\
    Subject: {random_string1}
    To: {receiver}
    From: {sender}

    {random_string2}"""

    return message

def main():
    with smtplib.SMTP(smtp_server, port) as server:
        server.login(login, password)
        message = randomMessage()
        #print(message)
        server.sendmail(sender, receiver, message)

if __name__ == '__main__':
    main()

Tags: ioimport消息messageservermain电子邮件def
1条回答
网友
1楼 · 发布于 2024-05-15 01:19:38

问题在消息类型中。我把它改成了MIMEText,现在可以用了

import random
import string
import smtplib
from email.mime.text import MIMEText

port = 2525 
smtp_server = "smtp.mailtrap.io"
login = "my mailtrap login"
password = "my mailtrap pass"

sender = "from@smtp.mailtrap.io"
receiver = "to@smtp.mailtrap.io"

def randomString(stringLength=10):
    lettersDigits = string.ascii_lowercase + "0123456789"
    return ''.join(random.choice(lettersDigits) for i in range(stringLength))

def makeMessage(subject, content):
    message = MIMEText(content)
    message["Subject"] = subject
    message["From"] = sender
    message["To"] = receiver

    return message

def randomMessage():
    return makeMessage(randomString(), randomString())

def sendMessage(message):
    with smtplib.SMTP(smtp_server, port) as server:
        server.login(login, password)
        server.sendmail(sender, receiver, message.as_string())

相关问题 更多 >

    热门问题