【问题标题】:How to send email in python for values fetched from database如何在 python 中为从数据库中获取的值发送电子邮件
【发布时间】:2020-04-23 12:19:57
【问题描述】:

我正在尝试使用 smtplib 发送一封电子邮件以获取从 mysql 数据库中获取的值。这是代码:

db = pymysql.connect('localhost', 'root', 'Gandharv@4me', 'ashmita')
cursor = db.cursor()

sql_query = "SELECT * FROM employees1 WHERE fname = 'gandharv' "
cursor.execute(sql_query)
result = cursor.fetchall()
for row in result:
        firstname = row[0]
        lastname = row[1]
        role = row[2]
response = """ First Name : {}, Last Name: {}, Role : {} """.format(
        firstname, lastname, role)
mail = smtplib.SMTP('smtp.gmail.com', '587')
content="FirstName: "+firstname+" Lastname: " +lastname + "Role: ",role
mail.ehlo()
mail.starttls()
mail.login('abc@gmail.com', 'myPassword')
mail.sendmail('abc@gmail.com',
                  'bcd@gmail.com', content)
mail.close()
print(response)

如果我使用 content="knsdlkds",它可以正常工作,但如果我使用 content =response 或 content="FirstName: "+firstname+" Lastname: " +lastname + "Role: ",role 它给了我 TypeError: expected string or bytes-like object。 这可以通过强制转换来解决吗?

【问题讨论】:

    标签: python mysql smtplib


    【解决方案1】:

    您的内容变量有错字。你能检查一下这是否适合你。

    HOST="localhost"
    USER="root"
    USER_PW="Gandharv@4me"
    HOST_DB="ashmita"
    
    gandharv = "VALUE_HERE"
    sender = 'from@fromdomain.com'
    debuglevel = 0
    
    try:
        db = pymysql.connect(HOST, USER, USER_PW, HOST_DB)
        cursor = db.cursor()
        sql_query = "SELECT * FROM employees1 WHERE fname = '{0}' ".format(gandharv)
        cursor.execute(sql_query)
        result = cursor.fetchone()
    
        # Send Email
        firstname = result[0]
        lastname = result[1]
        role = result[2]
        receivers = ['to@todomain.com']
    
        response = " First Name : {0}, Last Name: {1}, Role : {2} ".format(firstname, lastname, role)
    
        try:
            smtp = SMTP()
            smtp.set_debuglevel(debuglevel)
            smtp.connect('YOUR.MAIL.SERVER', 26)
            smtp.login('USERNAME@DOMAIN', 'PASSWORD')
            smtp.sendmail(sender, receivers, response)
            smtp.quit()
            print(response)
    
        except SMTPException:
            print "Error: unable to send email"
    
    except Exception as e:
        print "Error: {0}".format(e)
    

    【讨论】:

    • 顺便说一句,为什么要使用循环来解析 3 个字段?你可以使用 fetchone
    • 好吧,代码工作正常,我可以看到值,但电子邮件部分不起作用。
    • 好的,我会修改代码让它工作;但您需要更改凭据。等等……
    猜你喜欢
    • 1970-01-01
    • 2014-02-24
    • 2016-11-23
    • 2011-10-04
    • 1970-01-01
    • 2023-03-23
    • 2014-02-17
    • 2018-01-25
    • 2016-09-10
    相关资源
    最近更新 更多