Как отправить значение переменной по электронной почте с smtplib в python3? - PullRequest
0 голосов
/ 26 января 2019

Я могу отправить электронное письмо, когда сообщение представляет собой строку, непосредственно введенную в функцию, но не в том случае, если это переменная.

Этот код работает:

import smtplib

server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
server.login("something@gmail.com", "somepassword")

server.sendmail(
"something@gmail.com", 
"somethingelse@gmail.com", 
"a manually typed string like this")
server.quit()

Но этот код с переменной строкой не:

import smtplib

server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
server.login("something@gmail.com", "somepassword")

someVariable = "any string"

server.sendmail(
"something@gmail.com", 
"somethingelse@gmail.com", 
someVariable)
server.quit()

Точнее, вторая версия отправляет электронное письмо, но с пустым телом. Никакие символы не отображаются.

Как заставить работать вторую версию?

print(someVariable) и print(type(someVariable)) дают правильные (ожидаемые) результаты.

Ответы [ 3 ]

0 голосов
/ 26 января 2019

Мой личный опыт работы с Office365 привел меня к этому решению:

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

msg = MIMEMultipart()

msg['Subject'] = 'confirmation email'
msg['From'] = 'my.address@email.net'
msg['To'] = ", ".join(['your.address@email.net','another.address@email.net'])

body = 'Example email text here.'

msg.attach(MIMEText(body, 'html')) #set to whatever text format is preferred

И, наконец, последний пример того, как он соответствует вашему текущему сценарию

server.sendmail('my.address@email.net','your.address@email.net',msg.as_string())
0 голосов
/ 28 января 2019

Оказывается, это сработало, навеяно [these docs][1] и более ранним ответом rogersdevop (который у меня не работал):

def sendEmail (msge):

import smtplib
from email.mime.text import MIMEText

msg = MIMEText(msge)

me = 'something@gmail.com'
you = 'somethingelse@gmail.com'
msg['Subject'] = 'The subject line'
msg['From'] = me
msg['To'] = you

s = smtplib.SMTP_SSL('smtp.gmail.com', 465)
s.login("something@gmail.com", "somepassword")
s.send_message(msg)
s.quit()
0 голосов
/ 26 января 2019

Вы можете попробовать что-то вроде

import smtplib

server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
server.login("something@gmail.com", "somepassword")

server.sendmail(
"something@gmail.com", 
"somethingelse@gmail.com", 
"{}".format(someVariable))
server.quit()

Я думаю, вам просто нужно отформатировать любую переменную в строку

...