2011-08-29 13 views
33

Jestem powodzeniem mógł wysłać wiadomość e-mail za pomocą modułu smtplib. Ale kiedy emial jest wysyłany, nie zawiera tematu w e-mailu wysłanym.Python: „osobnik” nie pokazano podczas wysyłania wiadomości e-mail za pomocą modułu smtplib

import smtplib 

SERVER = <localhost> 

FROM = <from-address> 
TO = [<to-addres>] 

SUBJECT = "Hello!" 

message = "Test" 

TEXT = "This message was sent with Python's smtplib." 
server = smtplib.SMTP(SERVER) 
server.sendmail(FROM, TO, message) 
server.quit() 

W jaki sposób powinienem napisać "server.sendmail", aby uwzględnić również SUBJECT w wysłanej wiadomości e-mail.

Jeśli używam, server.sendmail (od, do, wiadomość, temat), to daje błąd o "smtplib.SMTPSenderRefused"

Odpowiedz

71

Zamontuj go jako nagłówek.

message = 'Subject: {}\n\n{}'.format(SUBJECT, TEXT) 

, a następnie:

server = smtplib.SMTP(SERVER) 
server.sendmail(FROM, TO, message) 
server.quit() 

także rozważyć zastosowanie standardowego modułu Pythona email - to pomoże y ou dużo podczas komponowania e-maili.

+0

działa jak czar, merci –

2

Patrz uwaga na końcu dokumentacji smtplib za:

In general, you will want to use the email package’s features to construct an email message, which you can then convert to a string and send via sendmail(); see email: Examples.

Oto link do sekcji Przykłady dokumentacji email „s, która rzeczywiście pokazuje tworzenie wiadomości o temacie. http://docs.python.org/library/email-examples.html#email-examples

Wydaje się, że smtplib nie obsługuje dodawanie tematu bezpośrednio i spodziewa się, że MSG już być sformatowana z tematem itp to gdzie moduł email przychodzi

2

Powinieneś raczej zmodyfikować kod do czegoś takiego:

from smtplib import SMTP as smtp 
from email.mime.text import MIMEText as text 

s = smtp(server) 

s.login(<mail-user>, <mail-pass>) 

m = text(message) 

m['Subject'] = 'Hello!' 
m['From'] = <from-address> 
m['To'] = <to-address> 

s.sendmail(<from-address>, <to-address>, m.as_string()) 

Oczywiście, <> zmienne muszą być rzeczywiste wartości ciągów lub ważnych zmiennych, po prostu wypełnia je jako posiadaczy miejscu. Działa to dla mnie podczas wysyłania wiadomości z tematami.

+0

otrzymuję następujący błąd: od email.mime.text MIMEText przywozowych jako tekst ImportError: nr moduł o nazwie mime.text – nsh

+0

@nsh - z jakiej wersji Pythona? Używam 2.6.6 na tej konkretnej instalacji. Jest całkiem możliwe, że znajduje się w nieco innym miejscu w 3.x. –

+0

używam 2.4.3 – nsh

2

Chyba trzeba umieścić go w wiadomości:

import smtplib 

message = """From: From Person <[email protected]> 
To: To Person <[email protected]> 
MIME-Version: 1.0 
Content-type: text/html 
Subject: SMTP HTML e-mail test 

This is an e-mail message to be sent in HTML format 

<b>This is HTML message.</b> 
<h1>This is headline.</h1> 
""" 

try: 
    smtpObj = smtplib.SMTP('localhost') 
    smtpObj.sendmail(sender, receivers, message)   
    print "Successfully sent email" 
except SMTPException: 
    print "Error: unable to send email" 

kod z: http://www.tutorialspoint.com/python/python_sending_email.htm

+0

Jedno spostrzeżenie: z, do i dziedzinach podlegających, na przykład, musi być na samym początku „message” zmiennej, na przykład, albo, pola nie będzie interpretowane jako to musi być spodziewany. Miałem doświadczenie z tylko wstawianie „osobnik” pole, a nie na początku zmiennej, a komunikat przybył do skrzynki pocztowej odbiorcy bez tematu. Twoje zdrowie. – ivanleoncz

4

spróbuj tego:

import smtplib 
from email.mime.multipart import MIMEMultipart 
msg = MIMEMultipart() 
msg['From'] = 'sender_address' 
msg['To'] = 'reciver_address' 
msg['Subject'] = 'your_subject' 
server = smtplib.SMTP('localhost') 
server.sendmail('from_addr','to_addr',msg.as_string()) 
+2

Co z treścią wiadomości? Gdzie to idzie? – Dss

+2

skończyło się po to, aby umieścić w organizmie https://docs.python.org/2/library/email-examples.html#id5 – Nico

Powiązane problemy