Rust邮件发送库sendgrid的使用,sendgrid提供高性能电子邮件API集成与SMTP服务支持
sendgrid-rs
非官方的SendGrid API Rust库。
如果您觉得crate的Sender
类型令人困惑,请在这里发表意见。
此crate需要Rust 1.15或更高版本,因为它使用了一个具有自定义派生实现的crate。
sendgrid-rs实现了所有其他受支持的SendGrid客户端库的功能。 要使用sendgrid-rs,您必须首先创建一个SendGrid账户并生成一个API密钥。要为您的SendGrid账户创建API密钥,请使用账户管理界面或参阅SendGrid API文档。
sendgrid-rs可在crates.io上获得,并可以按以下方式包含在您的Cargo.toml中:
[dependencies]
sendgrid = "X.X.X"
构建依赖项
此库利用了reqwest。按照reqwest README上的说明,以便能够向SendGrid API发送HTTPS请求。
特性
您可以为crate利用几个特性。要启用阻塞发送功能,您可以使用blocking
标志。要启用rustls TLS特性,请使用rustls
标志。
示例
使用此库的示例可以在示例目录中找到。此示例代码期望在进程环境中找到您的SendGrid API密钥。在Bash或ZSH等shell中,可以按以下方式设置:
export SENDGRID_API_KEY="SG.my.api.key"
SENDGRID_API_KEY=SG.... cargo run --example v3_disable_tracking --features="blocking" from@examle.com to@example.com
文档
请不要犹豫,通过我个人资料中列出的电子邮件与我联系。我会尽快提供帮助。如果您想贡献,也请联系我。
鸣谢
感谢meehow的贡献。
感谢richo对V2 API的改进。
许可证
MIT
以下是一个完整的Rust邮件发送示例代码:
use sendgrid::v3::*;
use std::env;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 从环境变量获取SendGrid API密钥
let api_key = env::var("SENDGRID_API_KEY")?;
// 创建发送器实例
let sender = Sender::new(api_key);
// 创建邮件内容
let content = Content::new()
.set_type("text/plain")
.set_value("这是一封测试邮件,来自Rust sendgrid库!");
// 创建邮件
let mail = Email::new()
.add_from("from@example.com") // 发件人邮箱
.add_to("to@example.com") // 收件人邮箱
.add_subject("Rust SendGrid测试邮件") // 邮件主题
.add_content(content); // 邮件内容
// 发送邮件
let response = sender.send(&mail)?;
println!("邮件发送响应状态: {}", response.status());
println!("邮件发送响应内容: {:?}", response.body());
Ok(())
}
要运行此代码,请确保:
- 在Cargo.toml中添加依赖:
sendgrid = "0.24.1"
- 设置环境变量:
export SENDGRID_API_KEY="您的API密钥"
- 启用阻塞特性:在Cargo.toml中添加
features = ["blocking"]
或使用--features="blocking"
运行
此示例展示了如何使用sendgrid-rs库发送简单的文本邮件,包括设置发件人、收件人、主题和邮件内容。
完整示例代码:
use sendgrid::v3::*;
use std::env;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 从环境变量获取SendGrid API密钥
let api_key = env::var("SENDGRID_API_KEY")?;
// 创建发送器实例
let sender = Sender::new(api_key);
// 创建邮件内容
let content = Content::new()
.set_type("text/plain")
.set_value("这是一封测试邮件,来自Rust sendgrid库!");
// 创建邮件
let mail = Email::new()
.add_from("from@example.com") // 发件人邮箱
.add_to("to@example.com") // 收件人邮箱
.add_subject("Rust SendGrid测试邮件") // 邮件主题
.add_content(content); // 邮件内容
// 发送邮件
let response = sender.send(&mail)?;
println!("邮件发送响应状态: {}", response.status());
println!("邮件发送响应内容: {:?}", response.body());
Ok(())
}
要运行此代码,请确保:
- 在Cargo.toml中添加依赖:
sendgrid = "0.24.1"
- 设置环境变量:
export SENDGRID_API_KEY="您的API密钥"
- 启用阻塞特性:在Cargo.toml中添加
features = ["blocking"]
或使用--features="blocking"
运行
Rust邮件发送库sendgrid的使用指南
介绍
sendgrid是一个高性能的电子邮件API集成库,为Rust开发者提供了便捷的邮件发送功能。该库支持SendGrid的Web API和SMTP协议,能够帮助开发者快速集成邮件服务到Rust应用中。
主要特性
- 支持SendGrid Web API v3
- 提供SMTP协议支持
- 高性能异步邮件发送
- 支持模板邮件和动态内容
- 完善的错误处理机制
安装方法
在Cargo.toml中添加依赖:
[dependencies]
sendgrid = "0.11"
tokio = { version = "1.0", features = ["full"] }
基本使用方法
1. 使用API密钥发送邮件
use sendgrid::v3::*;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let api_key = std::env::var("SENDGRID_API_KEY")?;
let sender = Sender::new(api_key);
let email = Email::new()
.add_to("recipient@example.com")
.add_from("sender@example.com")
.add_subject("测试邮件")
.add_html("<h1>Hello World!</h1>");
sender.send(&email).await?;
Ok(())
}
2. 使用SMTP发送邮件
use sendgrid::smtp::*;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let smtp = SmtpClient::new(
"smtp.sendgrid.net",
587,
"apikey",
"your_sendgrid_api_key"
);
let email = Email::new()
.to("recipient@example.com")
.from("sender@example.com")
.subject("SMTP测试邮件")
.html("<p>这是通过SMTP发送的测试邮件</p>");
smtp.send(email).await?;
Ok(())
}
3. 发送带附件的邮件
use sendgrid::v3::*;
use std::fs;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let api_key = std::env::var("SENDGRID_API_KEY")?;
let sender = Sender::new(api_key);
let attachment_content = fs::read("example.pdf")?;
let attachment = Attachment::new()
.set_content(attachment_content)
.set_filename("document.pdf")
.set_type("application/pdf");
let email = Email::new()
.add_to("recipient@example.com")
.add_from("sender@example.com")
.add_subject("带附件的邮件")
.add_html("<p>请查看附件</p>")
.add_attachment(attachment);
sender.send(&email).await?;
Ok(())
}
环境变量配置
建议将API密钥存储在环境变量中:
export SENDGRID_API_KEY=your_actual_api_key
错误处理
库提供了详细的错误类型,建议使用?
操作符或匹配错误类型进行处理:
match sender.send(&email).await {
Ok(_) => println!("邮件发送成功"),
Err(e) => eprintln!("发送失败: {}", e),
}
性能建议
- 重用Sender实例以避免重复创建连接
- 使用异步发送以提高并发性能
- 合理设置超时时间
这个库为Rust应用提供了完整可靠的邮件发送解决方案,适合各种规模的邮件发送需求。
完整示例代码
// 完整示例:使用SendGrid API发送带附件和模板的邮件
use sendgrid::v3::*;
use std::fs;
use std::env;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 从环境变量获取API密钥
let api_key = env::var("SENDGRID_API_KEY")
.expect("请设置SENDGRID_API_KEY环境变量");
// 创建Sender实例(建议重用)
let sender = Sender::new(api_key);
// 读取附件文件
let attachment_content = fs::read("example.pdf")?;
// 创建附件
let attachment = Attachment::new()
.set_content(attachment_content)
.set_filename("document.pdf")
.set_type("application/pdf");
// 构建邮件内容
let email = Email::new()
.add_to("recipient@example.com") // 收件人
.add_from("sender@example.com") // 发件人
.add_subject("带附件的测试邮件") // 邮件主题
.add_html("<h1>Hello World!</h1><p>这是一封测试邮件,请查看附件</p>") // HTML内容
.add_attachment(attachment) // 添加附件
.add_header("X-Test-Header", "test_value"); // 自定义头部
// 发送邮件并处理结果
match sender.send(&email).await {
Ok(response) => {
println!("邮件发送成功!状态码: {}", response.status());
println!("响应头: {:?}", response.headers());
}
Err(e) => {
eprintln!("邮件发送失败: {}", e);
return Err(e.into());
}
}
Ok(())
}
// 完整示例:使用SMTP协议发送邮件
use sendgrid::smtp::*;
use std::env;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 获取API密钥
let api_key = env::var("SENDGRID_API_KEY")
.expect("请设置SENDGRID_API_KEY环境变量");
// 创建SMTP客户端
let smtp = SmtpClient::new(
"smtp.sendgrid.net", // SMTP服务器地址
587, // 端口号
"apikey", // 用户名
&api_key // API密钥作为密码
);
// 构建邮件
let email = Email::new()
.to("recipient@example.com") // 收件人
.from("sender@example.com") // 发件人
.subject("SMTP测试邮件") // 邮件主题
.html("<p>这是通过SMTP协议发送的测试邮件</p>") // HTML内容
.text("这是纯文本内容"); // 纯文本内容
// 发送邮件
match smtp.send(email).await {
Ok(_) => println!("SMTP邮件发送成功!"),
Err(e) => {
eprintln!("SMTP发送失败: {}", e);
return Err(e.into());
}
}
Ok(())
}
# Cargo.toml 完整依赖配置
[package]
name = "sendgrid-example"
version = "0.1.0"
edition = "2021"
[dependencies]
sendgrid = "0.11"
tokio = { version = "1.0", features = ["full"] }
# 环境变量设置示例
# 在终端中执行以下命令设置环境变量
export SENDGRID_API_KEY=your_actual_sendgrid_api_key_here
注意:在实际使用前,请确保:
- 已注册SendGrid账号并获取有效的API密钥
- 已验证发件人邮箱地址
- 根据实际需求调整收件人、发件人邮箱地址
- 确保网络连接正常,能够访问SendGrid服务