web-dev-qa-db-ja.com

Pythonを使用して.csv添付ファイル付きのメールを送信するにはどうすればよいですか

さて、これに対処するいくつかの質問があることは知っていますが、それを適切に機能させる方法を見つけることができません。以下のコードと同じくらい簡単だと思いますが、これは私のファイルを添付しません。どんな助けも大歓迎です。私もPythonが初めてです。関数を機能させるためにインポートする必要があるメールモジュールはありますか?

import smtplib
fromaddr = "[email protected]
toaddrs = "[email protected]

msg = "help I cannot send an attachment to save my life"
attach = ("csvonDesktp.csv")

username = user
password = password

server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg, attach)
server.quit()
16
Jordan Starrk

適切なMIMEタイプを含むマルチパートメールを送信します。

https://docs.python.org/2/library/email-examples.html

このような可能性があります(私はこれをテストしました):

import smtplib
import mimetypes
from email.mime.multipart import MIMEMultipart
from email import encoders
from email.message import Message
from email.mime.audio import MIMEAudio
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage
from email.mime.text import MIMEText

emailfrom = "[email protected]"
emailto = "[email protected]"
fileToSend = "hi.csv"
username = "user"
password = "password"

msg = MIMEMultipart()
msg["From"] = emailfrom
msg["To"] = emailto
msg["Subject"] = "help I cannot send an attachment to save my life"
msg.preamble = "help I cannot send an attachment to save my life"

ctype, encoding = mimetypes.guess_type(fileToSend)
if ctype is None or encoding is not None:
    ctype = "application/octet-stream"

maintype, subtype = ctype.split("/", 1)

if maintype == "text":
    fp = open(fileToSend)
    # Note: we should handle calculating the charset
    attachment = MIMEText(fp.read(), _subtype=subtype)
    fp.close()
Elif maintype == "image":
    fp = open(fileToSend, "rb")
    attachment = MIMEImage(fp.read(), _subtype=subtype)
    fp.close()
Elif maintype == "audio":
    fp = open(fileToSend, "rb")
    attachment = MIMEAudio(fp.read(), _subtype=subtype)
    fp.close()
else:
    fp = open(fileToSend, "rb")
    attachment = MIMEBase(maintype, subtype)
    attachment.set_payload(fp.read())
    fp.close()
    encoders.encode_base64(attachment)
attachment.add_header("Content-Disposition", "attachment", filename=fileToSend)
msg.attach(attachment)

server = smtplib.SMTP("smtp.gmail.com:587")
server.starttls()
server.login(username,password)
server.sendmail(emailfrom, emailto, msg.as_string())
server.quit()
60
Jamie Ivanov

Python documentation の完全な例があります。ここで関連する部分をコピーして貼り付けることができますが、ページ全体はそれほど長くないので、そこを見てください。

5
s16h