用 SendGrid 发送免费电子邮件
1. 概述
SendGrid 免费账号可以限额发送 100/天封邮件,虽然比 Mailgun 的每月 10000 封的免费额度少,但胜成注册无需绑定信息卡。
集成 SendGrid 有 SMTP 和 API 两种方式。官方提供了 Python, Java, GO, Node.js, Ruby, PHP, C# 等语言的 API 库。
2. 注册
注册页 中会有显示 reCAPTCHA 验证,若无显示,需要KX上网。
3. 集成测试
本文示例使用 Python 3.8 发送邮件。
3.1. 通过 API 库集成
注册后在 [api keys](https://app.sendgrid.com/settings/api_keys) 设置页面创建应用和 API KEY。
官方的 python API 库是 sendgrid-python, 通过 pip 安装:
$ pip install sendgrid
测试如下:
import sendgrid
import os
from sendgrid.helpers.mail import *
def send_via_api():
SENDGRID_API_KEY = "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"
sg = sendgrid.SendGridAPIClient(api_key=SENDGRID_API_KEY)
from_email = Email("test@example.com")
to_email = To("jiang.haiyun@qq.com")
subject = "Sending with SendGrid is Fun"
content = Content("text/plain", "and easy to do anywhere, even with Python")
mail = Mail(from_email, to_email, subject, content)
response = sg.client.mail.send.post(request_body=mail.get())
print(response.status_code)
print(response.body)
print(response.headers)
send_via_api()
202
b''
Server: nginx
Date: Wed, 18 Mar 2020 04:46:11 GMT
Content-Length: 0
Connection: close
X-Message-Id: yrcMLevLRju8p9cEz4cUFg
Access-Control-Allow-Origin: https://sendgrid.api-docs.io
Access-Control-Allow-Methods: POST
Access-Control-Allow-Headers: Authorization, Content-Type, On-behalf-of, x-sg-elas-acl
Access-Control-Max-Age: 600
X-No-CORS-Reason: https://sendgrid.com/docs/Classroom/Basics/API/cors.html
获取到的状态码 202
表示服务器已接收发送邮件请求。
3.2. 通过 SMTP 集成
注册后在 SMTP 配置页 创建 API key,创建后会有 SMTP 相关的配置信息,如:
Server smtp.sendgrid.net
Ports 25, 587 (for unencrypted/TLS connections) 465 (for SSL connections)
Username apikey
Password your_api_key_value
之后可以连接 SMTP 服务器 smtp.sendgrid.net
来发送邮件,其中用户名为 apikey
, 密码为 your_api_key_value
。
测试如下:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
def send_via_smpt():
from_addr = "test@example.com"
to_addr = "test@example.com"
password = SENDGRID_API_KEY ="YOUR_API_KEY_VALUE"
smtp_server = "smtp.sendgrid.net"
username = "apikey"
subject = "Sending with SendGrid is Fun"
msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
server = smtplib.SMTP(smtp_server, 587)
server.set_debuglevel(1)
server.login(username, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
send_via_smpt()
资源
用 SendGrid 发送免费电子邮件的更多相关文章
- ASP.NET 3.5 中实现发送email电子邮件
来源:红黑联盟 方法1:cs代码 using System.Net.Mail; using System.Net; string mailServerName = "smtp.qq.com& ...
- 为什么我的outlook只能收信不能发信,发送测试电子邮件消息: 无法发送此邮件。请在帐户属性中验证电子邮件
链接地址:http://zhidao.baidu.com/link?url=aVIFo2aNLuHIZGZuEUataHkZp4XApHqyvbEK8ACHPhi3jwhGhM0GBAtm72AnsP ...
- Oracle 10G 使用UTL_SMTP发送中文电子邮件[Z]
CREATE OR REPLACE PROCEDURE SCOTT.HTML_EMAIL( P_TO IN VARCHAR2, --收件人地址 P_SUBJECT IN VARCHAR2, --邮件主 ...
- 使用UTL_SMTP发送中文电子邮件
就是在原有TOM源码的基础上修改utl_smtp.write_data中,将输出内容进行一下数据转换,这样可以保证中文输出不会出现乱码 ----------------------------- cr ...
- 免费SMTP邮件服务:Mandrill,Sendgrid,Mailjet,Postmarkapp,MailChimp
免费的SMTP发邮件服务平常几乎都没有怎么关注,Wordpress发邮件几乎用普通的邮箱的SMTP服务就可以完成任务,但是自从用了Discourse.Ghost博客后,发现找到一个合适的.免费配额大的 ...
- Windows上使用Thunderbird与GPG发送和解密公钥加密的电子邮件
作者:荒原之梦 原文链接:http://zhaokaifeng.com/?p=552 非对称加密的原理: 最先出现的加密方法是对称加密.在对称加密算法中是不区分公钥和私钥的,加密与解密使用的都是同一个 ...
- linux通过使用mail发送电子邮件
通过外部方法发送的电子邮件 bin/mail默认为本地sendmail发送电子邮件,求本地的机器必须安装和启动Sendmail服务.配置很麻烦,并且会带来不必要的 资源占用.而通过改动配置文件能够使用 ...
- C#发送电子邮件 (异步) z
///验证电子邮件的正则表达式 string emailStr = @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([ ...
- Azure 上通过 SendGrid 发送邮件
SendGrid 是什么? SendGrid 是架构在云端的电子邮件服务,它能提供基于事务的可靠的电子邮件传递. 并且具有可扩充性和实时分析的能力.常见的用例有: 自动回复用户的邮件 定期发送信息给用 ...
随机推荐
- Linux安装完后的调优(linux 6)
1:关闭 SELinux 方法一: #sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config #替换文本参数 ...
- [LC] 485. Max Consecutive Ones
Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Input: [1, ...
- 无标定量|有标定量|谱图计数|XIC|AMT数据库|RT对对齐|母离子|子离子|SILVER|SRM|iBAQ|APEX|差异蛋白筛选|MaxQuant|PANDA|C-HPP
生物医学大数据-蛋白质定量 现今肽段定量效率存在巨大差异.比如相同质量蛋白质,但是肽段和蛋白信号不均一,在物理条件一致时,仅有70%的重复率,并且当重复次数变多时,overlapping在变少. 无标 ...
- PHP PSR-2 代码风格规范
代码风格规范 本篇规范是 PSR-1 基本代码规范的继承与扩展. 本规范希望通过制定一系列规范化PHP代码的规则,以减少在浏览不同作者的代码时,因代码风格的不同而造成不便. 当多名程序员在多个项目中合 ...
- C++输入带空格的字符串
对于字符数组 1.使用 getline() 读入整行数据,回车键输入的换行符确定输入结尾. 调用方法:cin.getline(str, len) 第一个参数str用来存储输入行的数组名称,第二个参数是 ...
- mybatis-generator二次开发总结
二次开发(此文只作记录,具体代码及文章在内网,copy不出来) 自定义生成代码需求: 1.去除默认生成的example接口方法: (1)配置generatorConfig.xml (2)修改源码tab ...
- docker 使用:镜像和容器
docker 镜像 docker image是一个极度精简版的Linux程序运行环境,官网的java镜像包括的东西更少,除非是镜像叠加方式的如centos+java7,需要定制化build的一个安装包 ...
- js join()
在本例中,我们将创建一个数组,然后把它的所有元素放入一个字符串: <script type="text/javascript"> var arr = new Array ...
- IBM Developer:Java 9 新特性概述
Author: 成富 Date: Dec 28, 2017 Category: IBM-Developer (20) Tags: Java (27) 原文地址:https://www.ibm.com/ ...
- marquee上下无缝滚动
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name=&qu ...