【问题标题】:How do I email individuals with csv files?如何使用 csv 文件向个人发送电子邮件?
【发布时间】:2020-11-11 12:03:32
【问题描述】:

我对 python 还很陌生,我正在尝试编写一个代码,该代码将获取一个 csv 文件并通过电子邮件将所有电子邮件排成一行,同时每次切换名称。这是我写的:

import smtplib
import csv

def nobrackets(current):
    return str(current).replace('[','').replace(']','')
def noastrick(current):
    return str(current).replace('\'','').replace('\'','')

sender_email = "xxxxxxxxx"

password = "xxxxxxxxx"

names=[]
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(sender_email, password)
print("Login success")
with open('Emails.csv','r') as csv_file:
    csv_reader=csv.reader(csv_file)
    for line in csv_reader:
        names.append(line[0])
        message=('Hey', noastrick(nobrackets(names)),'how are you doing?')
        server.sendmail(sender_email, line, message)
        names.clear()

问题是,我成功登录,但随后我收到一堆关于文件/系统/库内容的文本,它给了我错误:TypeError:预期的字符串或缓冲区。 有谁知道怎么回事?

【问题讨论】:

    标签: python csv smtplib


    【解决方案1】:

    如果您发布整个错误消息可能会有所帮助。话虽这么说,只是猜测,它可能与您的消息字符串有关 - 看起来您将元组作为消息而不是字符串传递。

    而不是: message=('嘿', noastrick(nobrackets(names)),'你好吗?')

    也许试试: message=(f'Hey {noastrick(nobrackets(names))} 你好吗?')

    该建议使用 f 字符串文字来创建一个字符串,并将函数的结果作为字符串直接插入到字符串中,因此您的消息变量将包含一个字符串而不是元组。

    【讨论】:

      【解决方案2】:

      使用时

      server.sendmail(sender_email, line, message)
      

      message 可以是包含 ASCII 范围内的字符的字符串,也可以是字节字符串。 from smtplib.sendmail

      但是,在您的代码中,message 是一个元组。将其转换为字符串,您应该一切顺利。例如:

      server.sendmail(sender_email, line, " ".join(message))
      

      【讨论】:

        猜你喜欢
        • 2019-03-01
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        • 2012-05-18
        • 2014-07-08
        • 2019-04-22
        相关资源
        最近更新 更多