Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpMlSv 280 of 288 menu
◀ ▶

Несколько получателей в 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.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить