2017-09-26 1 views
0

Ich versuche, eine E-Mail mit Python, mit einem Anhang zu senden. Hier ist mein Code:Python 3.6 - Senden von E-Mails aus Python

import smtplib 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 
from email.mime.base import MIMEBase 
from email import encoders 

fromaddr = "[email protected]" 
toaddr = "[email protected]" 

msg = MIMEMultipart() 

msg['From'] = fromaddr 
msg['To'] = toaddr 
msg['Subject'] = "Testing Python Email - Plus Attachments" 

body = "This is an automated email" 

msg.attach(MIMEText(body, 'plain')) 

filename = "nice.png" 
attachment = open("C:\\Users\\Ben Hannah\\Documents", "rb") 

part = MIMEBase('application', 'octet-stream') 
part.set_payload((attachment).read()) 
encoders.encode_base64(part) 
part.add_header('Content-Disposition', "attachment; filename= %s" % filename) 

msg.attach(part) 

server = smtplib.SMTP('smtp.office365.com', 587) 
server.starttls() 
server.login(fromaddr, "************") 
text = msg.as_string() 
server.sendmail(fromaddr, toaddr, text) 
server.quit() 

Und das ist, was es gibt zurück:

Traceback (most recent call last): 
    File "C:\Users\Ben Hannah\AppData\Local\Programs\Python\Python36-32\lib\base64.py", line 517, in _input_type_check 
    m = memoryview(s) 
TypeError: memoryview: a bytes-like object is required, not 'NoneType' 

The above exception was the direct cause of the following exception: 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Users\Ben Hannah\AppData\Local\Programs\Python\Python36-32\lib\email\encoders.py", line 32, in encode_base64 
    encdata = str(_bencode(orig), 'ascii') 
    File "C:\Users\Ben Hannah\AppData\Local\Programs\Python\Python36-32\lib\base64.py", line 534, in encodebytes 
    _input_type_check(s) 
    File "C:\Users\Ben Hannah\AppData\Local\Programs\Python\Python36-32\lib\base64.py", line 520, in _input_type_check 
    raise TypeError(msg) from err 
TypeError: expected bytes-like object, not NoneType 

die E-Mail sendet, recieves die Mailbox und sehen, ist eine Anlage - aber wenn man versucht, es zu öffnen, sagt sie es kann die Datei nicht öffnen.

+0

es ohne Anhänge funktionierts? –

Antwort

2

Sie haben vergessen, den Dateinamen in open aufzunehmen.

filename = "nice.png" 
attachment = open("C:\\Users\\Ben Hannah\\Documents", "rb") 

Versuchen,

attachment = open("C:\\Users\\Ben Hannah\\Documents\\" + filename, "rb") 
+0

Hallo! das macht Sinn Danke! Können Sie mir sagen, wie ich diese E-Mail jede Stunde automatisch ausführen lassen kann? Würde ich Schleifen oder Rekursionen verwenden? –

+0

Ich würde ein Planungswerkzeug verwenden. Hier gibt es einige Optionen für Windows: https://stackoverflow.com/questions/132971/what-is-the-windows-version-of-cron – balki