2017-09-26 10 views
0

添付ファイルとともにpythonを使用して電子メールを送信しようとしています。ここに私のコードです:Python 3.6 - 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() 

そして、これは、それが戻って与えるものである:

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 

メールはメールボックスがそれをrecievesと見アタッチメントだ、送信 - しかし、それを開こうとすると、それはそれを言いますファイルを開くことができません。

+0

それは、添付ファイルなしで動作しますか? –

答えて

2

filenameをopenに含めるのを忘れた。

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

てみてください、

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

こんにちは!それは意味があるあなたに感謝します!この電子メールを自動的に1時間ごとに実行する方法を教えていただけますか?ループや再帰を使用しますか? –

+0

私はいくつかのスケジューリングツールを使用します。ここにいくつかのオプションがあります:https://stackoverflow.com/questions/132971/what-is-the-windows-version-of-cron – balki