AmazonSESSample.java Source code

Java tutorial

Introduction

Here is the source code for AmazonSESSample.java

Source

/*
 * Copyright 2014-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 *  http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.net.URLEncoder;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.util.*;

import com.amazonaws.AmazonClientException;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient;
import com.amazonaws.services.simpleemail.model.*;
import com.amazonaws.services.simpleemail.model.Message;
import org.apache.commons.io.IOUtils;

import javax.mail.*;
import javax.mail.internet.*;

public class AmazonSESSample {

    static final String FROM = "aravind@gofastpay.com"; // Replace with your "From" address. This address must be verified.
    static final String TO = "aravind@gofastpay.com"; // Replace with a "To" address. If you have not yet requested
    static List<String> CC = Arrays.asList("aravind@gofastpay.com");
    // production access, this address must be verified.
    static final String BODY = "This email was sent through Amazon SES by using the AWS SDK for Java.";
    static final String SUBJECT = "Amazon SES test (AWS SDK for Java)";

    /*
     * Before running the code:
     *      Fill in your AWS access credentials in the provided credentials
     *      file template, and be sure to move the file to the default location
     *      (~/.aws/credentials) where the sample code will load the
     *      credentials from.
     *      https://console.aws.amazon.com/iam/home?#security_credential
     *
     * WANRNING:
     *      To avoid accidental leakage of your credentials, DO NOT keep
     *      the credentials file in your source directory.
     */

    public static void main(String[] args) throws IOException, MessagingException {

        // Construct an object to contain the recipient address.
        //Destination destination = new Destination().withToAddresses(new String[]{TO}).withCcAddresses((String[])CC.toArray());

        // Create the subject and body of the message.
        //Content subject = new Content().withData(SUBJECT);
        //Content textBody = new Content().withData(BODY);
        //Body body = new Body().withText(textBody);

        // Create a message with the specified subject and body.
        //Message message = new Message().withSubject(subject).withBody(body);

        // Assemble the email.
        //SendEmailRequest request = new SendEmailRequest().withSource(FROM).withDestination(destination).withMessage(message);
        /*SendRawEmailRequest rawEmailRequest = new SendRawEmailRequest()
            .withSource(FROM).withDestinations(destination.getToAddresses())
            //.withDestinations(destination.getCcAddresses())
            .withRawMessage(getRawMessage());*/

        try {
            System.out.println("Attempting to send an email through Amazon SES by using the AWS SDK for Java...");

            /*
             * The ProfileCredentialsProvider will return your [default]
             * credential profile by reading from the credentials file located at
             * (~/.aws/credentials).
             *
             * TransferManager manages a pool of threads, so we create a
             * single instance and share it throughout our application.
             */
            AWSCredentials credentials;
            try {
                credentials = new ProfileCredentialsProvider().getCredentials();
            } catch (Exception e) {
                throw new AmazonClientException("Cannot load the credentials from the credential profiles file. "
                        + "Please make sure that your credentials file is at the correct "
                        + "location (~/.aws/credentials), and is in valid format.", e);
            }

            // Instantiate an Amazon SES client, which will make the service call with the supplied AWS credentials.
            AmazonSimpleEmailServiceClient client = new AmazonSimpleEmailServiceClient(credentials);

            // Choose the AWS region of the Amazon SES endpoint you want to connect to. Note that your production
            // access status, sending limits, and Amazon SES identity-related settings are specific to a given
            // AWS region, so be sure to select an AWS region in which you set up Amazon SES. Here, we are using
            // the US East (N. Virginia) region. Examples of other regions that Amazon SES supports are US_WEST_2
            // and EU_WEST_1. For a complete list, see http://docs.aws.amazon.com/ses/latest/DeveloperGuide/regions.html
            Region REGION = Region.getRegion(Regions.US_WEST_2);
            client.setRegion(REGION);

            // Send the email.
            //client.sendEmail(request);
            //System.out.println("Sending raw email: " + rawEmailRequest.toString());
            SendRawEmailRequest rawEmailRequest = new SendRawEmailRequest(getRawMessage());
            rawEmailRequest.setDestinations(Arrays.asList(TO));
            rawEmailRequest.setSource(FROM);
            SendRawEmailResult rawEmailResult = client.sendRawEmail(rawEmailRequest);
            System.out.println("Email Result = " + rawEmailResult.toString());
            // System.out.println("Email sent!");

        } catch (Exception ex) {
            System.out.println("The email was not sent.");
            System.out.println("Error message: " + ex.getMessage());
        }
    }

    private static RawMessage getRawMessage() throws MessagingException, IOException {
        // JavaMail representation of the message
        Session s = Session.getInstance(new Properties(), null);
        s.setDebug(true);
        MimeMessage msg = new MimeMessage(s);

        // Sender and recipient
        msg.setFrom(new InternetAddress("aravind@gofastpay.com"));
        InternetAddress[] address = { new InternetAddress("aravind@gofastpay.com") };
        msg.setRecipients(javax.mail.Message.RecipientType.TO, address);
        msg.setSentDate(new Date());
        // Subject
        msg.setSubject(SUBJECT);

        // Add a MIME part to the message
        //MimeMultipart mp = new MimeMultipart();
        Multipart mp = new MimeMultipart();
        MimeBodyPart mimeBodyPart = new MimeBodyPart();
        //mimeBodyPart.setText(BODY);

        //BodyPart part = new MimeBodyPart();
        //String myText = BODY;
        //part.setContent(URLEncoder.encode(myText, "US-ASCII"), "text/html");
        //part.setText(BODY);
        //mp.addBodyPart(part);
        //msg.setContent(mp);
        mimeBodyPart.setContent(BODY, "text/html");
        mp.addBodyPart(mimeBodyPart);
        msg.setContent(mp);

        // Print the raw email content on the console
        //PrintStream out = System.out;
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        msg.writeTo(out);
        //String rawString = out.toString();
        //byte[] bytes = IOUtils.toByteArray(msg.getInputStream());
        //ByteBuffer byteBuffer = ByteBuffer.allocate(bytes.length);
        //ByteBuffer byteBuffer = ByteBuffer.wrap(Base64.getEncoder().encode(rawString.getBytes()));

        //byteBuffer.put(bytes);
        //byteBuffer.put(Base64.getEncoder().encode(bytes));
        RawMessage rawMessage = new RawMessage(ByteBuffer.wrap(out.toByteArray()));
        return rawMessage;
    }
}