Отправка писем с smtp python, проблема с блокировкой def - PullRequest
0 голосов
/ 14 января 2020

Я новичок в 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()

1 Ответ

0 голосов
/ 15 января 2020

Проблема была в типе сообщения. Я изменил его на 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())
...