diff --git a/examples/client.rs b/examples/client.rs index 17d0441..9fb792b 100644 --- a/examples/client.rs +++ b/examples/client.rs @@ -32,7 +32,7 @@ fn sendmail(source_address: &str, recipient_addresses: &[&str], message: &str, s email.from(source_address); email.body(message); email.subject(subject); - email.date(); + email.date_now(); let mut email_client = Client::new( @@ -40,7 +40,7 @@ fn sendmail(source_address: &str, recipient_addresses: &[&str], message: &str, s Some(my_hostname), ); email_client.send_email( - email.get_sendable_email() + email ) } diff --git a/src/client/mod.rs b/src/client/mod.rs index 2f5c3f4..ef9cc7a 100644 --- a/src/client/mod.rs +++ b/src/client/mod.rs @@ -104,9 +104,16 @@ impl Client { } /// Sends an email - pub fn send_email(&mut self, email: SendableEmail) -> SmtpResult { + pub fn send_email(&mut self, email: T) -> SmtpResult { + + let from_address = email.from_address(); + let to_addresses = email.to_addresses(); + let message = email.message(); + // Connect to the server - try!(self.connect()); + if !self.is_connected() { + try!(self.connect()); + } // Extended Hello or Hello if let Err(error) = self.ehlo() { @@ -124,15 +131,15 @@ impl Client { debug!("server {}", self.server_info.as_ref().unwrap()); // Mail - try_smtp!(self.mail(email.from_address.as_slice()) self); + try_smtp!(self.mail(from_address.as_slice()) self); // Log the mail command - info!("from=<{}>, size={}, nrcpt={}", email.from_address, email.message.len(), email.to_addresses.len()); + info!("from=<{}>, size={}, nrcpt={}", from_address, message.len(), to_addresses.len()); // Recipient // TODO Return rejected addresses // TODO Manage the number of recipients - for to_address in email.to_addresses.iter() { + for to_address in to_addresses.iter() { try_smtp!(self.rcpt(to_address.as_slice()) self); } @@ -140,14 +147,14 @@ impl Client { try_smtp!(self.data() self); // Message content - let sent = try_smtp!(self.message(email.message.as_slice()) self); + let sent = try_smtp!(self.message(message.as_slice()) self); // Log the rcpt command info!("to=<{}>, status=sent ({})", - email.to_addresses.connect(">, to=<"), sent); + to_addresses.connect(">, to=<"), sent); // Quit - try_smtp!(self.quit() self); + //try_smtp!(self.quit() self); return Ok(sent); } diff --git a/src/lib.rs b/src/lib.rs index fa2cbe6..05dbd57 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -33,10 +33,10 @@ //! email.from("user@example.com"); //! email.subject("Hello world"); //! email.body("Hi, Hello world."); -//! email.date(); +//! email.date_now(); //! //! let mut client = Client::localhost(); -//! let result = client.send_email(email.get_sendable_email()); +//! let result = client.send_email(email); //! assert!(result.is_ok()); //! ``` //! @@ -55,13 +55,13 @@ //! email.body("Hi, Hello world."); //! email.reply_to("contact@example.com"); //! email.add_header(("X-Custom-Header", "my header")); -//! email.date(); +//! email.date_now(); //! //! let mut client = Client::new( //! ("server.tld", 10025), // remote server and custom port //! Some("my.hostname.tld"), // my hostname //! ); -//! let result = client.send_email(email.get_sendable_email()); +//! let result = client.send_email(email); //! assert!(result.is_ok()); //! ``` diff --git a/src/sendable_email.rs b/src/sendable_email.rs index e8d3d35..c06d3ef 100644 --- a/src/sendable_email.rs +++ b/src/sendable_email.rs @@ -9,9 +9,10 @@ //! SMTP sendable email -#[deriving(Clone)] -pub struct SendableEmail { - pub from_address: String, - pub to_addresses: Vec, - pub message: String, +/// Converts to an `Header` +pub trait SendableEmail { + /// Converts to an `Header` struct + fn from_address(&self) -> String; + fn to_addresses(&self) -> Vec; + fn message(&self) -> String; }