Expand description
Unofficial async client for YOPmail.
yopmail-client drives the same HTTP endpoints as the YOPmail web UI to:
- list inbox messages
- fetch message content (text/HTML/raw) and attachments
- send messages (currently only to
@yopmail.com)
This crate is not affiliated with YOPmail. The YOPmail site is HTML-driven and may change at any time; parsing is best-effort and may break without warning.
Quick start
use yopmail_client::{generate_random_mailbox, YopmailClient};
#[tokio::main]
async fn main() -> Result<(), yopmail_client::Error> {
// A mailbox is the local part only; the domain is always yopmail.com.
// Generating a random mailbox helps avoid collisions in shared inbox namespaces.
let mailbox = generate_random_mailbox(12);
let mut client = YopmailClient::new(&mailbox)?;
// Establish a session (cookies + `yp` token). Most methods do this lazily, but calling it
// explicitly makes the stateful behavior obvious.
client.open_inbox().await?;
// Page numbers are passed through to YOPmail as-is (typically page 1 is the newest).
let messages = client.list_messages(1).await?;
if let Some(msg) = messages.first() {
// Use the `Message::id` returned by `list_messages`.
let content = client.fetch_message_full(&msg.id).await?;
println!("{}", content.text);
}
Ok(())
}Notes for experienced users
- The client is stateful: it keeps a cookie jar and an extracted
yptoken. Methods take&mut selfbecause the session state is updated on demand. - Network calls are performed with
reqwest; non-2xx HTTP responses are typically surfaced asError::Status, with the response body captured for debugging. - There is no built-in polling loop.
YopmailClient::list_messagesperforms a single request; if you want to poll, implement a loop withtokio::time::sleep.
Error behavior
- Transport errors, TLS failures, DNS issues, and timeouts are returned as
Error::Http(reqwest::Error). The request timeout is configured viaYopmailClientBuilder::timeout. - Some methods explicitly validate HTTP status codes and return
Error::Statusfor non-2xx responses (for exampleYopmailClient::list_messages,YopmailClient::fetch_message_full,YopmailClient::send_message, andYopmailClient::download_attachment). - Other methods currently do not check
StatusCodeand may returnOk(...)even if the server responded with a non-2xx status (notablyYopmailClient::open_inbox). If you need strict status handling, wrap the crate or open an issue. fetch_message_fullhas a limited retry mechanism: on HTTP 400 it retries the mail fetch with a few different message ID encodings. There is no network retry/backoff logic.- External system failures are expected: YOPmail HTML structure can change, endpoints can be
rate-limited or blocked, and responses may include unexpected markup. These typically surface
as
Error::Status,Error::Http, or best-effort empty parses depending on the endpoint.
Re-exports§
pub use client::YopmailClient;pub use client::YopmailClientBuilder;pub use client::generate_random_mailbox;pub use error::Error;pub use models::Attachment;pub use models::Message;pub use models::MessageContent;
Modules§
- client
- High-level async client for interacting with YOPmail via its web endpoints.
- error
- Error types for this crate.
- models
- Data models returned by YOPmail operations.
Constants§
- BASE_
URL - Default base URL used by
YopmailClient. - DEFAULT_
DOMAIN - Default domain used when building full YOPmail addresses.
- DEFAULT_
TIMEOUT_ SECS - Default timeout in seconds used by
default_timeout.
Functions§
- default_
timeout - Default request timeout used by the client.