Come inviare e -mail con Smtplib e MimeText?
Domanda
Sto cercando una risposta per alcuni giorni e fino a quando ora non ho risolto il mio problema. Tutto quello che voglio è inviare un semplice messaggio di posta elettronica dal mio programma se si verifica un errore. Sto usando il server Gmail per farlo e in realtà invia l'e -mail, ma il messaggio dell'e -mail non appare. Ecco il codice:
def accept(self):
HOST = 'smtp.gmail.com'
PORT = '587'
user = '***********@gmail.com'
senha = '***********'
servidor = smtplib.SMTP()
servidor.connect(HOST, PORT)
servidor.ehlo()
servidor.starttls()
servidor.ehlo()
servidor.login(user, senha)
assunto = 'Relatorio de Erro'
para = '**************@hotmail.com'
endereco = self.nemail.text()
de = str(endereco)
texto = self.message.toPlainText()
textos = Message(texto)
corpo = MIMEText(textos)
corpo['From'] = de
corpo['To'] = user
corpo['Subject'] = assunto
servidor.set_debuglevel(1)
servidor.sendmail(user, para, corpo.as_string())
servidor.quit
Ciò solleva un errore sul mimeText. Dice che non può convertire il mimeText in str. Ho provato un'altra versione, solo per il test. Invio di una semplice stringa:
def accept(self):
HOST = 'smtp.gmail.com'
PORT = '587'
user = '*************@gmail.com'
senha = '************'
servidor = smtplib.SMTP()
servidor.connect(HOST, PORT)
servidor.ehlo()
servidor.starttls()
servidor.ehlo()
servidor.login(user, senha)
assunto = 'Relatorio de Erro'
para = '*********@hotmail.com'
servidor.set_debuglevel(1)
servidor.sendmail(user, para, assunto)
servidor.quit()
L'e -mail arriva alla posta in arrivo giusta, ma non ha alcun messaggio, niente. Ho cercato molto, ho letto i documenti, l'ho provato così tanto che non so nemmeno cosa sto facendo. Sembra che io stia quasi ottenendo. Qualcuno può aiutarmi?
Soluzione
Ecco una versione funzionante modificata dal codice che utilizzo quando eseguiamo la manutenzione del sistema.
#!/usr/bin/env python
import smtplib
host = 'smtp.gmail.com'
port = '587'
user = 'user@gmail.com'
passw = 'password'
server = smtplib.SMTP()
server.connect(host, port)
server.ehlo()
server.starttls()
server.login(user, passw)
notice = "Completed"
tolist = ["user@somewhere.com"]
fromaddr = '"IT Staff" '
subject = 'Oracle server maintenance notice'
message = '''
The Oracle database server maintenance is
%s
''' % notice
hdr = "From: %s\r\nTo: %s\r\nSubject: %s\r\nX-Mailer: My-Mail\r\n\r\n" % (fromaddr, tolist, subject)
server.sendmail("it@vlsmaps.com", tolist, hdr+message)
server.quit