Несколько получателей в Rust
Одно и то же тело можно адресовать нескольким ящикам. Основного получателя задают одним шагом цепочки, а второго добавляют копией, чтобы текст не дублировали вручную.
Разберем два адреса и соберем сообщение с полем копии:
use lettre::{FileTransport, Message, Transport};
fn main() {
match std::fs::create_dir_all("out") {
Ok(()) => {}
Err(e) => {
println!("{}", e);
return;
}
}
let from_addr = match "sender@example.com".parse() {
Ok(a) => a,
Err(e) => {
println!("{}", e);
return;
}
};
let to_addr = match "user@example.com".parse() {
Ok(a) => a,
Err(e) => {
println!("{}", e);
return;
}
};
let cc_addr = match "team@example.com".parse() {
Ok(a) => a,
Err(e) => {
println!("{}", e);
return;
}
};
let email = match Message::builder()
.from(from_addr)
.to(to_addr)
.cc(cc_addr)
.subject("Hi")
.body(String::from("hello"))
{
Ok(m) => m,
Err(e) => {
println!("{}", e);
return;
}
};
let sender = FileTransport::new("out");
match sender.send(&email) {
Ok(_) => println!("saved"),
Err(e) => println!("{}", e),
}
}
В сохраненном файле будут оба адреса
получения, а тело останется одним блоком
hello. Сбой на любом разборе
адреса остановит сборку до записи в
out.
Третий ящик можно добавить второй копией в той же цепочке:
use lettre::{FileTransport, Message, Transport};
fn main() {
match std::fs::create_dir_all("out") {
Ok(()) => {}
Err(e) => {
println!("{}", e);
return;
}
}
let from_addr = match "sender@example.com".parse() {
Ok(a) => a,
Err(e) => {
println!("{}", e);
return;
}
};
let to_addr = match "user@example.com".parse() {
Ok(a) => a,
Err(e) => {
println!("{}", e);
return;
}
};
let cc_one = match "team@example.com".parse() {
Ok(a) => a,
Err(e) => {
println!("{}", e);
return;
}
};
let cc_two = match "archive@example.com".parse() {
Ok(a) => a,
Err(e) => {
println!("{}", e);
return;
}
};
let email = match Message::builder()
.from(from_addr)
.to(to_addr)
.cc(cc_one)
.cc(cc_two)
.subject("Hi")
.body(String::from("hello"))
{
Ok(m) => m,
Err(e) => {
println!("{}", e);
return;
}
};
let sender = FileTransport::new("out");
match sender.send(&email) {
Ok(_) => println!("saved"),
Err(e) => println!("{}", e),
}
}
Дан адрес:
user@example.com
Сохраните сообщение с отправителем
sender@example.com, этим
получателем, копией team@example.com
и телом "one text" в out.
Скажите, сколько раз нужно собирать тело, если два ящика получают один и тот же текст.
Дан адрес:
archive@example.com
Добавьте этот ящик второй копией к
сообщению с основным user@example.com
и первой копией team@example.com,
затем сохраните результат в out.