zoukankan      html  css  js  c++  java
  • 用python的smtplib发送使用dkim签名的电子邮件

    用python的smtplib发送使用dkim签名的电子邮件 « Xiaoxia[PG]

    用python的smtplib发送使用dkim签名的电子邮件

    最终效果

    如下,能够使我们发送的邮件直接到达对方的收件箱,而不是被当作垃圾邮件。

    制作DKIM密钥

    使用openssl生成我们所需要的Private Key和Public Key。

    X:\sign>openssl genrsa -out rsa.private 1024
    WARNING: can't open config file: /home/drangon/work/mingw-w64-dgn/lib_bin/openssl/ssl/openssl.cnf
    Loading 'screen' into random state - done
    Generating RSA private key, 1024 bit long modulus
    ..................++++++
    ................................++++++
    e is 65537 (0x10001)
    X:\sign>openssl rsa -in rsa.private -out rsa.public -pubout -outform PEM
    WARNING: can't open config file: /home/drangon/work/mingw-w64-dgn/lib_bin/openssl/ssl/openssl.cnf
    writing RSA key

    这样得到rsa.private和rsa.public两个文本文件。

    域名配置DKIM

    在域名控制面板,除了需要给域名(例如xsign.org)设置MX记录,还要添加一项dkim的TXT记录。
    假设dkim的Selector是s1(可以有多个Selector,表示可以使用多个dkim证书),则要设置的是:

    s1._domainkey.xsign.org TXT

    内容为:

    k=rsa; t=y; p=[Public Key的内容]

    可以使用nslookup检查是否已经生效。

    I:\Users\Administrator>nslookup
    默认服务器: ns3.gd.cnmobile.net
    Address: 221.179.38.7

    > set type=TXT
    > s1._domainkey.xsign.org
    服务器: ns3.gd.cnmobile.net
    Address: 221.179.38.7

    非权威应答:
    s1._domainkey.xsign.org text =

    "t=y; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC1OmB7qZbFWqAgl51jS
    U0Opn/wdJaB2mTkkPgD+gW3ccjXTazgYZVkokCeD+67oceWw42mLTkzg402Vc+IaIk+L57GULVxzECw8
    mWtR7jOcG3UOnuaRMScX8uRlnllXj6v1SQTHljW2M++D/hj3dn8lDWxWw0s8IbesSb3far8XQIDAQAB"

    SMTP发送代码

    需要用到python的dkim库和dnspython.org提供的dns库。

    1. import smtplib, email, dkim  
    2. import dns.resolver  
    3.   
    4. def sendmail(mailfrom, mailto, msg):  
    5.     domain = email.Utils.unquote(mailto).split("@")[1]  
    6.     host = dns.resolver.query(domain, "MX")[0].exchange  
    7.     smtp = smtplib.SMTP(str(host))  
    8.     smtp.sendmail(mailfrom, [mailto], msg)  
    9.     smtp.quit()  
    10.   
    11. if __name__ == "__main__":  
    12.     msg = "From: xiaoxia@xsign.org\r\n" \  
    13.         "To: gdxxhg@gmail.com\r\n" \  
    14.         "Subject: Hi\r\n\r\n" \  
    15.         "I miss you!!!!\r\n"  
    16.     sig = dkim.sign(msg, "s1""xsign.org", open("./rsa_private.txt").read())  
    17.     msg = sig + msg  
    18.     print msg  
    19.     sendmail("xiaoxia@xsign.org""gdxxhg@gmail.com", msg)  
    20.     print "ok"  

    运行程序,即发送了一封邮件到gdxxhg@gmail.com的收件箱里。

    验证DKIM

    GMail里可以看到dkim的验证已经通过!

    Authentication-Results: mx.google.com; spf=softfail (google.com: domain of transitioning xiaoxia@xsign.org does not designate 120.196.50.109 as permitted sender) smtp.mail=xiaoxia@xsign.org; dkim=pass (test mode) header.i=@xsign.org
    Date: Tue, 24 May 2011 10:51:43 -0700 (PDT)
    Message-Id: <4ddbf02f.c45bdc0a.6271.6877SMTPIN_ADDED@mx.google.com>
    DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=xsign.org;
    i=@xsign.org; q=dns/txt; s=s1; t=1306259500; h=From : To : Subject;
    bh=5yC7rMxS78DH//OfCDEEHnf4nFVZ21IFPtApH3ARSkg=; b=ASqTJBKbhDzVcj59AYR7kUI7WF+o5GJHje5iN6JqiCtVTk/DQaft58sridQu4YMTFfadmuPRnUfGia/CU2nJFnzeJmGq9nQIRctwsLdUWIKGxc5xp3eZ0H4rU57WAuDJPRQdea7Vaf4sNotDHEldKC1lHsSgdROYbhE12CZjNpI=
    From: xiaoxia@xsign.org
    To: gdxxhg@gmail.com
    Subject: Hi

    I miss you!!!!

  • 相关阅读:
    02数组基本操作
    01数组创建
    java流程控制
    assignment1
    Lecture 1: Introduction
    Lecture 14:Radial Basis Function Network
    Lecture 13:Deep Learning
    机器学习基石笔记16——机器可以怎样学得更好(4)
    机器学习基石笔记15——机器可以怎样学得更好(3)
    机器学习基石笔记14——机器可以怎样学得更好(2)
  • 原文地址:https://www.cnblogs.com/lexus/p/2379120.html
Copyright © 2011-2022 走看看