Amazon SES API v2 examples using SDK for Rust (original) (raw)
match self
.client
.create_contact_list()
.contact_list_name(CONTACT_LIST_NAME)
.send()
.await
{
Ok(_) => writeln!(self.stdout, "Contact list created successfully.")?,
Err(e) => match e.into_service_error() {
CreateContactListError::AlreadyExistsException(_) => {
writeln!(
self.stdout,
"Contact list already exists, skipping creation."
)?;
}
e => return Err(anyhow!("Error creating contact list: {}", e)),
},
}
match self
.client
.create_contact()
.contact_list_name(CONTACT_LIST_NAME)
.email_address(email.clone())
.send()
.await
{
Ok(_) => writeln!(self.stdout, "Contact created for {}", email)?,
Err(e) => match e.into_service_error() {
CreateContactError::AlreadyExistsException(_) => writeln!(
self.stdout,
"Contact already exists for {}, skipping creation.",
email
)?,
e => return Err(anyhow!("Error creating contact for {}: {}", email, e)),
},
}
let contacts: Vec<Contact> = match self
.client
.list_contacts()
.contact_list_name(CONTACT_LIST_NAME)
.send()
.await
{
Ok(list_contacts_output) => {
list_contacts_output.contacts.unwrap().into_iter().collect()
}
Err(e) => {
return Err(anyhow!(
"Error retrieving contact list {}: {}",
CONTACT_LIST_NAME,
e
))
}
};
let coupons = std::fs::read_to_string("../resources/newsletter/sample_coupons.json")
.unwrap_or_else(|_| r#"{"coupons":[]}"#.to_string());
let email_content = EmailContent::builder()
.template(
Template::builder()
.template_name(TEMPLATE_NAME)
.template_data(coupons)
.build(),
)
.build();
match self
.client
.send_email()
.from_email_address(self.verified_email.clone())
.destination(Destination::builder().to_addresses(email.clone()).build())
.content(email_content)
.list_management_options(
ListManagementOptions::builder()
.contact_list_name(CONTACT_LIST_NAME)
.build()?,
)
.send()
.await
{
Ok(output) => {
if let Some(message_id) = output.message_id {
writeln!(
self.stdout,
"Newsletter sent to {} with message ID {}",
email, message_id
)?;
} else {
writeln!(self.stdout, "Newsletter sent to {}", email)?;
}
}
Err(e) => return Err(anyhow!("Error sending newsletter to {}: {}", email, e)),
}
match self
.client
.create_email_identity()
.email_identity(self.verified_email.clone())
.send()
.await
{
Ok(_) => writeln!(self.stdout, "Email identity created successfully.")?,
Err(e) => match e.into_service_error() {
CreateEmailIdentityError::AlreadyExistsException(_) => {
writeln!(
self.stdout,
"Email identity already exists, skipping creation."
)?;
}
e => return Err(anyhow!("Error creating email identity: {}", e)),
},
}
let template_html =
std::fs::read_to_string("../resources/newsletter/coupon-newsletter.html")
.unwrap_or_else(|_| "Missing coupon-newsletter.html".to_string());
let template_text =
std::fs::read_to_string("../resources/newsletter/coupon-newsletter.txt")
.unwrap_or_else(|_| "Missing coupon-newsletter.txt".to_string());
// Create the email template
let template_content = EmailTemplateContent::builder()
.subject("Weekly Coupons Newsletter")
.html(template_html)
.text(template_text)
.build();
match self
.client
.create_email_template()
.template_name(TEMPLATE_NAME)
.template_content(template_content)
.send()
.await
{
Ok(_) => writeln!(self.stdout, "Email template created successfully.")?,
Err(e) => match e.into_service_error() {
CreateEmailTemplateError::AlreadyExistsException(_) => {
writeln!(
self.stdout,
"Email template already exists, skipping creation."
)?;
}
e => return Err(anyhow!("Error creating email template: {}", e)),
},
}
match self
.client
.delete_contact_list()
.contact_list_name(CONTACT_LIST_NAME)
.send()
.await
{
Ok(_) => writeln!(self.stdout, "Contact list deleted successfully.")?,
Err(e) => return Err(anyhow!("Error deleting contact list: {e}")),
}
match self
.client
.delete_email_identity()
.email_identity(self.verified_email.clone())
.send()
.await
{
Ok(_) => writeln!(self.stdout, "Email identity deleted successfully.")?,
Err(e) => {
return Err(anyhow!("Error deleting email identity: {}", e));
}
}
match self
.client
.delete_email_template()
.template_name(TEMPLATE_NAME)
.send()
.await
{
Ok(_) => writeln!(self.stdout, "Email template deleted successfully.")?,
Err(e) => {
return Err(anyhow!("Error deleting email template: {e}"));
}
}
- For API details, see the following topics in AWS SDK for Rust API reference.