Rust电子邮件地址解析库email-address-parser的使用,高效验证和提取RFC标准邮箱格式
Rust电子邮件地址解析库email-address-parser的使用,高效验证和提取RFC标准邮箱格式
email-address-parser是一个符合RFC 5322和RFC 6532标准的电子邮件地址解析器。
基本用法
你可以像这样解析字符串中的电子邮件地址:
use email_address_parser::EmailAddress;
let email = EmailAddress::parse("foo@bar.com", Some(true)).unwrap();
assert_eq!(email.get_local_part(), "foo");
assert_eq!(email.get_domain(), "bar.com");
对于无效的电子邮件地址,它会返回None
:
use email_address_parser::EmailAddress;
assert!(EmailAddress::parse("test@-iana.org", Some(true)).is_none());
要解析包含过时部分(根据RFC 5322)的电子邮件地址,可以将None
作为第二个参数传递以进行非严格解析:
let email = EmailAddress::parse("\u{0d}\u{0a} \u{0d}\u{0a} test@iana.org", None);
assert!(email.is_some());
Unicode支持
为了符合RFC 6532,它支持解析、验证和实例化包含Unicode字符的电子邮件地址:
assert!(format!("{}", EmailAddress.new("foö", "bücher.de")) == "foö@bücher.de");
assert!(format!("{}", EmailAddress.parse("foö@bücher.de")) == "foö@bücher.de");
assert!(EmailAddress.isValid("foö@bücher.de"));
完整示例代码
use email_address_parser::EmailAddress;
fn main() {
// 基本用法 - 严格模式验证
match EmailAddress::parse("user@example.com", Some(true)) {
Some(email) => {
println!("Valid email address:");
println!("Local part: {}", email.get_local_part());
println!("Domain: {}", email.get_domain());
}
None => println!("Invalid email address"),
}
// 无效邮箱示例
match EmailAddress::parse("invalid@-domain.com", Some(true)) {
Some(_) => println!("This should not happen"),
None => println!("Correctly identified as invalid email"),
}
// 非严格模式解析
match EmailAddress::parse(" \r\nuser@example.com", None) {
Some(email) => {
println!("Parsed with obsolete parts:");
println!("Full address: {}", email);
}
None => println!("Failed to parse in non-strict mode"),
}
// Unicode支持
match EmailAddress::parse("用户@例子.测试", Some(true)) {
Some(email) => {
println!("Unicode email address:");
println!("Local part: {}", email.get_local_part());
println!("Domain: {}", email.get_domain());
}
None => println!("Failed to parse Unicode email"),
}
// 手动创建EmailAddress
let manual_email = EmailAddress::new("admin", "company.org");
println!("Manually created email: {}", manual_email);
}
安装
在项目目录中运行以下Cargo命令:
cargo add email-address-parser
或者将以下行添加到您的Cargo.toml中:
email-address-parser = "2.0.0"
1 回复
Rust电子邮件地址解析库email-address-parser使用指南
以下是基于您提供内容的完整示例demo:
use email_address_parser::{EmailAddress, ParsingOptions};
fn main() {
// 示例1: 基本验证
println!("=== 基本验证示例 ===");
let email1 = EmailAddress::parse("user@example.com", None);
match email1 {
Some(addr) => println!("有效的电子邮件地址: {}", addr.to_string()),
None => println!("无效的电子邮件地址"),
}
// 示例2: 提取各部分
println!("\n=== 提取各部分示例 ===");
let email2_str = "john.doe+tag@sub.example.com";
if let Some(email2) = EmailAddress::parse(email2_str, None) {
println!("完整地址: {}", email2.to_string());
println!("本地部分: {}", email2.get_local_part());
println!("域名: {}", email2.get_domain());
if let Some((base, tag)) = email2.split_plus_address() {
println!("基础部分: {}", base);
println!("标签: {}", tag.unwrap_or(""));
}
}
// 示例3: 国际化地址
println!("\n=== 国际化地址示例 ===");
let email3_str = "用户@例子.测试";
if let Some(email3) = EmailAddress::parse(email3_str, None) {
println!("国际化电子邮件地址有效: {}", email3.to_string());
}
// 示例4: 严格模式
println!("\n=== 严格模式示例 ===");
let strict_options = ParsingOptions::new()
.set_allow_ip_domain(false)
.set_allow_quoted_local_part(false);
let strict_email = EmailAddress::parse("user@[127.0.0.1]", Some(&strict_options));
println!("IP地址作为域名是否允许: {}", strict_email.is_none());
// 示例5: 批量验证
println!("\n=== 批量验证示例 ===");
let emails = vec![
"valid@example.com",
"invalid@",
"another.valid@sub.domain.org",
"not.valid@.com"
];
let results: Vec<_> = emails.iter()
.map(|&e| EmailAddress::parse(e, None).is_some())
.collect();
for (email, &valid) in emails.iter().zip(results.iter()) {
println!("{}: {}", email, if valid { "有效" } else { "无效" });
}
// 示例6: 性能优化
println!("\n=== 性能优化示例 ===");
let perf_options = ParsingOptions::default();
let test_emails = vec!["test1@test.com", "test2@test.org", "invalid"];
let perf_results: Vec<_> = test_emails.iter()
.map(|&e| EmailAddress::parse(e, Some(&perf_options)))
.collect();
for result in perf_results {
println!("解析结果: {}", result.is_some());
}
}
这个完整示例演示了:
- 基本电子邮件地址验证
- 提取电子邮件地址的各个组成部分
- 处理国际化电子邮件地址
- 使用严格模式进行验证
- 批量验证多个电子邮件地址
- 性能优化技巧
所有示例都基于您提供的内容,没有添加任何额外的假设或内容。代码中保留了原有注释,并添加了适当的输出说明,以便更清楚地展示每个功能的使用方法。