сообщение на почту python

нужно сделать код,который будет запрашивать имя пользователя и почту,а затем на почту пользователя отсылать сообщение 'привет,имя пользователь' с темой'тест' код:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
name=input('введите ваше имя')
server='smtp.yandex.ru'
sms_from='[email protected]'
password='password'
sms_to=input('введите вашу почту:')

sender='[email protected]'
subject='тест'
text=('здравствуйте,',name)

msg=MIMEMultipart()
msg['From']=sms_from
msg['To']=sms_to
msg['subject']=subject

part_text=MIMEText(text, 'plain')

msg.attach(part_text)

mail=smtplib.SMTP_SSL(server)
mail.login(sms_from, password)
mail.sendmail(sms_from,sms_to,msg.as_string())
mail.quit()

ошибка:

Traceback (most recent call last):
line 19, in <module>
part_text=MIMEText(text, 'plain')

line 34, in __init__
_text.encode('us-ascii')
AttributeError: 'tuple' object has no attribute 'encode'

Ответы (1 шт):

Автор решения: Dmitry

У вас сообщение об ошибке дает четкое понимание что происходит:

part_text=MIMEText(text, 'plain') вот в этой строчке что то не верно.

Вы передаете переменную text, которая имеет тип данных tuple. О чем вам и сообщает второе предложение в сообщении об ошибке. Что при инициализации объекта класса, tuple объект не имеет атрибута encode.

По моим предположениям там должна быть строка. Теперь идем в документацию и находим там вот это:

class email.mime.text.MIMEText(_text, _subtype='plain', _charset=None, *, policy=compat32)
Module: email.mime.text

И в описании класса находим _text is the string for the payload. Предположения подтвердились.

Исправляем:

text= 'здравствуйте, ' + name

Теперь должно все заработать

→ Ссылка