Sending an email with python using csv data for the body

送分小仙女□ 提交于 2020-04-18 03:50:30

问题


I am using the csv library to pull data to into an email body. I am pulling certain columns from the csv for the body. I am using a junk gmail account to test. I'm just confused on how to use the for loop. If I'm correct, you need a for loop to read the rows then a for loop to email out. I did read Reading and Writing CSV Files but was uncertain how to implement it with smtplib.

import csv, smtplib, ssl

message = """Subject: Your Title

{supervisor} {title} {start}"""

from_address = "test@gmail.com"
password = input("Type your password and press enter: ")

context = ssl.create_default_context()
with smtplib.SMTP_SSL("smtp.gmail.com", 465, context=context) as server:
    server.login(from_address, password)
    with open('test.csv','rb') as file:
        reader = csv.reader(file, delimiter=',')
        next(reader)

            #start = []
            #title = []
            #supervisor = []

            for row in reader:
                title = row[3]
                start = row[0]
                supervisor = row[4]

            for supervisor, title, start in reader:
                 server.sendmail(
                    from_address,
                     Email,
                     message.format(supervisor=supervisor, start=start, title=title)
                 )

print('Emails were sent successfully!')  

CSV File:

StartDate,Employee Name,PC,Title,Supervisor Name,email 
12/9/2019,Katti M. Ricke,289,Recruiter,Courtney Clark,test@gmail.com

回答1:


Probably if you use pandas for to handle the csv could be more easy ..for install pandas just pip install pandas

import pandas as pd
import io
import smtplib, ssl
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# read csv using pandas and then convert the csv to html string ....this code later will add into body
str_io = io.StringIO()
df = pd.read_csv('test.csv')
df.to_html(buf=str_io)
table_html = str_io.getvalue()
print(table_html)


sender_email = "mymail@gmail.com"
receiver_email = "anothermail@gmail.com"
password = "mypass"

message = MIMEMultipart("alternative")
message["Subject"] = "Subject: Your Title"
message["From"] = sender_email
message["To"] = receiver_email

text = """\
Subject: Your Title"""

html = """\
<html>
  <body>
    <p>{table_html}</p>
  </body>
</html>
""".format(table_html=table_html)

part1 = MIMEText(text, "plain")
part2 = MIMEText(html, "html")
message.attach(part1)
message.attach(part2)

# Send email
context = ssl.create_default_context()
with smtplib.SMTP_SSL("smtp.gmail.com", 465, context=context) as server:
    server.login(sender_email, password)
    server.sendmail(
        sender_email, receiver_email, message.as_string()
    )


来源:https://stackoverflow.com/questions/59253638/sending-an-email-with-python-using-csv-data-for-the-body

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!