Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpMlEr 281 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 email = match Message::builder() .from(from_addr) .to(to_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), } println!("next step"); }

После строки saved или текста сбоя на экране появится next step. Печать ошибки не обязана обрывать main, если после сопоставления есть другой код.

Укажем несуществующий каталог и разберем сбой без выхода из функции:

use lettre::{FileTransport, Message, Transport}; fn main() { 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 email = match Message::builder() .from(from_addr) .to(to_addr) .subject("Hi") .body(String::from("hello")) { Ok(m) => m, Err(e) => { println!("{}", e); return; } }; let sender = FileTransport::new("/no/such/mail/dir"); match sender.send(&email) { Ok(_) => println!("saved"), Err(e) => println!("{}", e), } println!("after fail"); }

Дан адрес:

user@example.com

Соберите сообщение с этим получателем, сохраните его в out и после сопоставления исхода передачи выведите "done" в любом случае.

Скажите, напечатается ли "after fail" в примере с неверным каталогом, если ветка сбоя только выводит текст ошибки.

Дан адрес:

sender@example.com

Разберите этот адрес отправителя через сопоставление, при сбое выведите текст и завершите main, при успехе сохраните короткое сообщение в out.

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