簡體   English   中英

使用Python發送帶有附件的電子郵件

[英]Sending email with attachment in Python

我有使用Python發送電子郵件的代碼:

from email.mime.base import MIMEBase
from email import encoders
from email.utils import formatdate

SERVER_ADDR = 'smtp.gmail.com'

def sendMail(dir, fromAddr, toAddr, subject, text, files):
  msg = MIMEMultipart()
  msg['From'] = fromAddr
  msg['To'] = toAddr
  msg['Date'] = datetime.date.today()
  msg['Subject'] = subject

  msg.attach(MIMEText(text))

  for file in files:
    part = MIMEBase('application',"octet-stream")
    part.set_payload( open(file,"rb").read )
    encoders.encode_base64(part)
    part.add_header('Content-Disposition','attachment; filename {}'.format(os.path.basename(file)))
    msg.attach(part)

  smtp = smtplib.SMTP(SERVER_ADDR,587)
  smtp.sendmail(fromAddr,toAddr,msg.as_string())
  smtp.close()
  return 0

def main(argv):
  files = [argv[1]]
  sendMail(myemail,myemail,"Zalacznik","Tekst maila bla bla bla.",
           files) # I replaced my email here
  return 0

if __name__=="__main__":
  sys.exit(main(sys.argv))

我有錯誤:

TypeError: sendMail() missing 1 required positional argument: 'files'

我的代碼有什么問題?

[編輯]:好的,我已經從簽名中刪除了dir,但是我還有另一個錯誤:

TypeError: expected bytes, not builtin function or method

encoders.encode_base64(part)錯誤encoders.encode_base64(part)

這個問題與發送電子郵件或附件無關。

該簽名sendMail函數作為第一個位置參數dir -雖然你不使用的功能的任何地方。 但是,在調用該函數時,您似乎錯過了該參數:您發送的第一個參數是電子郵件,因此大概是fromAddr

您可能只想從定義中刪除該參數。

sendMail的定義和調用sendMail一起:

def sendMail(dir,     fromAddr, toAddr,      subject,                    text,  files):
          #  |        |         |            |                           |      !
    sendMail(myemail, myemail,  "Zalacznik", "Tekst maila bla bla bla.", files)

對於Python解釋參數位置上,它告訴你,你錯過了最后一個files ,但我要說你真的錯過了第一個, dir

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM