Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get the response after sending an email using amazon SES SMTP interface?

The document says that after sending an email, no matter it was successful or not, SES will return a response to the sender, includeing message ID and an error if it wasn't sent successfully. enter image description here https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-concepts-process.html

I am wondering how to get this response?

I am using SMTP and JavaMail to send emails, like: transport.sendMessage(msg, msg.getAllRecipients());

The sendMessage method doesn't return anything. So how can I get the response?

Thanks in advance!

Update:

In https://forums.aws.amazon.com/thread.jspa?messageID=363239, it is said that

SMTP returns the message ID appended to the OK response to the DATA command. For example: 250 Ok 0000aaaaccccaaaacccc-ccccaacc-aaaa-cccc-aaaa-acccccaaaaae-000000

Could anyone teach me how to extract the message ID from the OK response?

like image 999
powerseed Avatar asked Oct 15 '25 05:10

powerseed


2 Answers

At best you can register a TransportListener with Transport, this listener will be called with TransportEvent. This TransportListener is called every time Transport object emits an events like MESSAGE_DELIVERED, MESSAGE_NOT_DELIVERED, MESSAGE_PARTIALLY_DELIVERED.

You can do something like this -

// Create a transport.
Transport transport = session.getTransport();

//Register your event listener
//This TransportListener is called every time Transport object emits an events like `MESSAGE_DELIVERED`, `MESSAGE_NOT_DELIVERED`, `MESSAGE_PARTIALLY_DELIVERED`.
transport.addTransportListener(new TransportListener() {
    @Override
    public void messageDelivered(TransportEvent transportEvent) {
        System.out.println("From Message Delivered");
        System.out.println(transportEvent.getMessage());
    }

    @Override
    public void messageNotDelivered(TransportEvent transportEvent) {
        System.out.println("From Message Not Delivered");
        System.out.println(transportEvent.getMessage());
    }

    @Override
    public void messagePartiallyDelivered(TransportEvent transportEvent) {
        System.out.println("From Message Partially Delivered");
        System.out.println(transportEvent.getMessage());
    }
});
like image 55
Tanuj Avatar answered Oct 17 '25 20:10

Tanuj


I fugured it out.

I should used getLastServerResponse() method of SMTPTransport class, such as

        String response = transport.getLastServerResponse();
        System.out.println("response: " + response);

The output will be like response: 250 Ok 0100017352b73695-a103f18d-f0a3-4a48-9d86-db1df264a3fe-000000

like image 23
powerseed Avatar answered Oct 17 '25 19:10

powerseed



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!