在Python中处理Sendgrid smtp API中的Bounce

时间:2016-08-17 08:18:31

标签: python email smtp sendgrid

我通过python EmailMultiAlternatives通过sendgrid smtp api发送营销电子邮件。我想知道如何直接从那里处理弹跳以将特定电子邮件标记为无法投递。

代码段是:

def send1():
    text_content = 'Hi this is the text version'
    connection = get_connection(host=EMAIL_HOST,
                                port=EMAIL_PORT,
                                username=EMAIL_HOST_USER,
                                password=EMAIL_HOST_PASSWORD,
                                use_tls=EMAIL_USE_TLS)
    connection.open()
    subject = 'Inviting {0} to join the Business Network of SMEs'.format('surya')
    html_content = template.format('Surya')
    from_email = 'sp@abc.com'
    to = 'abc@gmail.com'
    msg = EmailMultiAlternatives(subject, text_content, from_email, [to], connection=connection)
    msg.attach_alternative(html_content, "text/html")
    msg.send()
    connection.close()

是否可以在msg.send()之后获得响应,或者是否有其他方式。

3 个答案:

答案 0 :(得分:0)

响应阻止和跳出等事件的最佳方法是实施event webhook

您还可以通过bounces endpoint轮询数据。

答案 1 :(得分:0)

所以,对于那些可能正在寻找解决方案的人:

我每天都会使用imaplib python软件包来抓取收件箱(我发送电子邮件的邮件ID),以便收到退回的电子邮件和投诉以获取这些不需要的电子邮件。

def bounce():

    M = imaplib.IMAP4_SSL('imap.zoho.com')
    M.login('email@emailcom', password)
    M.select()
    line = '(HEADER Subject "Bounce")'
    typ, data = M.uid('search', line)
    if typ != 'OK':
        return
    print(len(data[0].split()))
    for i in data[0].split():

        result, data = M.uid('fetch', i, '(RFC822)')
        raw_email = data[0][1].decode('utf-8', 'ignore')
        emg = email.message_from_string(raw_email)

        w = get_first_text_block(emg)
        emails = re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+", str(w), re.I)

因此,每天或每小时执行一次代码会对您有所帮助。

答案 2 :(得分:0)

您也可以使用sendgrid。下面是使用6.4.1版本编写的。

import sendgrid
sg = sendgrid.SendGridAPIClient(api_key="<your_key>")
payload = {
    "limit": 100,
    "offset": 0,
}
response = sg.client.suppression.bounces.get(query_params=payload)

query_params可以省略以接受默认值,还有start_time和end_time(需要为整数Unix时间)。