Python 3向客户发送祝贺

Python 3向客户发送祝贺,python,python-3.x,python-3.6,Python,Python 3.x,Python 3.6,我如何通过电子邮件向我们的客户发送生日祝贺和随附的jpg文件? 我写脚本,他显示通知: import time import os birthdayFile = 'birthdays.csv' def checkTodaysBirthdays(): fileName = open(birthdayFile, 'r') today = time.strftime('%m%d') flag = 0 for line in fileName: if

我如何通过电子邮件向我们的客户发送生日祝贺和随附的jpg文件? 我写脚本,他显示通知:

import time
import os

birthdayFile = 'birthdays.csv'

def checkTodaysBirthdays():
    fileName = open(birthdayFile, 'r')
    today = time.strftime('%m%d')
    flag = 0
    for line in fileName:
        if today in line:
            line = line.split(' ')
            flag =1

            os.system('notify-send "Birthdays Today: ' + line[1]
            + ' ' + line[2] + '"')
    if flag == 0:
            os.system('notify-send "No Birthdays Today!')
但我不知道,如何通过电子邮件发送祝贺。
文件
birthdays.csv
包含下一行:
日期、姓名、电子邮件
您可以使用
smtplib
。下面是一个简单通知系统的实现,它使用一个类来利用clean context manager behavor:

import datetime
import smtplib, csv
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email import Encoders

class SendEmail:
  def __init__(self, _to, _from = 'youremail@domaim.com', subject = 'Happy Birthday!', attachment = 'birthday.jpg'):
    self._to = _to
    self._from = _from
    self._subject = subject
    self.attachment = attachment
  def __enter__(self):
    msg = MIMEMultipart()
    for part in ['Subject', 'From', 'To']:
       msg[part] = getattr(self, f'_{i.lower()}')
    part = MIMEBase('application', "octet-stream")
    part.set_payload(open(self.attachment, "rb").read())
    Encoders.encode_base64(part)
    part.add_header('Content-Disposition', f'attachment; filename="{self.attachment}"')
    msg.attach(part)
    server = smtplib.SMTP(self.EMAIL_SERVER)
    server.sendmail(self.EMAIL_FROM, self.EMAIL_TO, msg.as_string())
    return self
  def __exit__(self, *args):
    pass
  @classmethod
  def send_bulk(cls, users:list):
    for date, name, email in users:
      _d = datetime.datetime.now()
      if _d.month in date and _d.day in date:
        with cls(email, subject = f'Happy Birthday, {name}!') as f:
          pass

with open('filename.csv') as f:
  SendEmail.send_bulk(csv.reader(f))

首先,您真的不应该在
os.system
中使用字符串连接。想象一下,如果有人将自己的生日设置为
;rm-rf/#!其次,查看Python包含的smtplib:。