Repository: camel Updated Branches: refs/heads/master 308529ff3 -> 88fca852f
CAMEL-6649: AWS Simple Email Service - add attachment support Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/52495d3c Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/52495d3c Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/52495d3c Branch: refs/heads/master Commit: 52495d3cacb0f796c0f5c86abb915e5733b717a4 Parents: 308529f Author: Andrea Cosentino <anco...@gmail.com> Authored: Sun Jul 12 12:05:52 2015 +0200 Committer: Andrea Cosentino <anco...@gmail.com> Committed: Sun Jul 12 12:38:43 2015 +0200 ---------------------------------------------------------------------- .../camel/component/aws/ses/SesProducer.java | 67 +++++- .../component/aws/ses/AmazonSESClientMock.java | 16 ++ .../camel/component/aws/ses/MockMessage.java | 235 +++++++++++++++++++ .../aws/ses/SesComponentSpringTest.java | 27 +++ 4 files changed, 337 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/52495d3c/components/camel-aws/src/main/java/org/apache/camel/component/aws/ses/SesProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ses/SesProducer.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ses/SesProducer.java index 78a0295..f5ecaf2 100644 --- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ses/SesProducer.java +++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ses/SesProducer.java @@ -16,14 +16,26 @@ */ package org.apache.camel.component.aws.ses; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.ByteBuffer; import java.util.Collection; import java.util.List; +import java.util.Map; + +import javax.activation.DataHandler; +import javax.mail.MessagingException; +import javax.mail.internet.MimeMessage; import com.amazonaws.services.simpleemail.model.Body; import com.amazonaws.services.simpleemail.model.Content; import com.amazonaws.services.simpleemail.model.Destination; import com.amazonaws.services.simpleemail.model.SendEmailRequest; import com.amazonaws.services.simpleemail.model.SendEmailResult; +import com.amazonaws.services.simpleemail.model.SendRawEmailRequest; +import com.amazonaws.services.simpleemail.model.SendRawEmailResult; + import org.apache.camel.Endpoint; import org.apache.camel.Exchange; import org.apache.camel.Message; @@ -41,14 +53,21 @@ public class SesProducer extends DefaultProducer { } public void process(Exchange exchange) throws Exception { - SendEmailRequest request = createMailRequest(exchange); - log.trace("Sending request [{}] from exchange [{}]...", request, exchange); - - SendEmailResult result = getEndpoint().getSESClient().sendEmail(request); - - log.trace("Received result [{}]", result); - Message message = getMessageForResponse(exchange); - message.setHeader(SesConstants.MESSAGE_ID, result.getMessageId()); + if (!(exchange.getIn().getBody() instanceof javax.mail.Message)) { + SendEmailRequest request = createMailRequest(exchange); + log.trace("Sending request [{}] from exchange [{}]...", request, exchange); + SendEmailResult result = getEndpoint().getSESClient().sendEmail(request); + log.trace("Received result [{}]", result); + Message message = getMessageForResponse(exchange); + message.setHeader(SesConstants.MESSAGE_ID, result.getMessageId()); + } else { + SendRawEmailRequest request = createRawMailRequest(exchange); + log.trace("Sending request [{}] from exchange [{}]...", request, exchange); + SendRawEmailResult result = getEndpoint().getSESClient().sendRawEmail(request); + log.trace("Received result [{}]", result); + Message message = getMessageForResponse(exchange); + message.setHeader(SesConstants.MESSAGE_ID, result.getMessageId()); + } } private SendEmailRequest createMailRequest(Exchange exchange) { @@ -61,6 +80,14 @@ public class SesProducer extends DefaultProducer { return request; } + + private SendRawEmailRequest createRawMailRequest(Exchange exchange) { + SendRawEmailRequest request = new SendRawEmailRequest(); + request.setSource(determineFrom(exchange)); + request.setDestinations(determineRawTo(exchange)); + request.setRawMessage(createRawMessage(exchange)); + return request; + } private com.amazonaws.services.simpleemail.model.Message createMessage(Exchange exchange) { com.amazonaws.services.simpleemail.model.Message message = new com.amazonaws.services.simpleemail.model.Message(); @@ -75,6 +102,21 @@ public class SesProducer extends DefaultProducer { return message; } + private com.amazonaws.services.simpleemail.model.RawMessage createRawMessage(Exchange exchange) { + com.amazonaws.services.simpleemail.model.RawMessage message = new com.amazonaws.services.simpleemail.model.RawMessage(); + javax.mail.Message content = exchange.getIn().getBody(javax.mail.Message.class); + OutputStream byteOutput=new ByteArrayOutputStream(); + try { + content.writeTo(byteOutput); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + byte[] messageByteArray=((ByteArrayOutputStream)byteOutput).toByteArray(); + message.setData(ByteBuffer.wrap(messageByteArray)); + return message; + } + @SuppressWarnings("unchecked") private Collection<String> determineReplyToAddresses(Exchange exchange) { List<String> replyToAddresses = exchange.getIn().getHeader(SesConstants.REPLY_TO_ADDRESSES, List.class); @@ -100,6 +142,15 @@ public class SesProducer extends DefaultProducer { } return new Destination(to); } + + @SuppressWarnings("unchecked") + private List determineRawTo(Exchange exchange) { + List<String> to = exchange.getIn().getHeader(SesConstants.TO, List.class); + if (to == null) { + to = getConfiguration().getTo(); + } + return to; + } private String determineFrom(Exchange exchange) { String from = exchange.getIn().getHeader(SesConstants.FROM, String.class); http://git-wip-us.apache.org/repos/asf/camel/blob/52495d3c/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/AmazonSESClientMock.java ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/AmazonSESClientMock.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/AmazonSESClientMock.java index 3ed184a..21669ee 100644 --- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/AmazonSESClientMock.java +++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/AmazonSESClientMock.java @@ -22,9 +22,12 @@ import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient; import com.amazonaws.services.simpleemail.model.SendEmailRequest; import com.amazonaws.services.simpleemail.model.SendEmailResult; +import com.amazonaws.services.simpleemail.model.SendRawEmailRequest; +import com.amazonaws.services.simpleemail.model.SendRawEmailResult; public class AmazonSESClientMock extends AmazonSimpleEmailServiceClient { private SendEmailRequest sendEmailRequest; + private SendRawEmailRequest sendRawEmailRequest; public AmazonSESClientMock() { super(new BasicAWSCredentials("myAccessKey", "mySecretKey")); @@ -38,8 +41,21 @@ public class AmazonSESClientMock extends AmazonSimpleEmailServiceClient { return result; } + + @Override + public SendRawEmailResult sendRawEmail(SendRawEmailRequest sendRawEmailRequest) throws AmazonServiceException, AmazonClientException { + this.sendRawEmailRequest = sendRawEmailRequest; + SendRawEmailResult result = new SendRawEmailResult(); + result.setMessageId("1"); + + return result; + } public SendEmailRequest getSendEmailRequest() { return sendEmailRequest; } + + public SendRawEmailRequest getSendRawEmailRequest() { + return sendRawEmailRequest; + } } http://git-wip-us.apache.org/repos/asf/camel/blob/52495d3c/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/MockMessage.java ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/MockMessage.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/MockMessage.java new file mode 100644 index 0000000..5e4e0db --- /dev/null +++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/MockMessage.java @@ -0,0 +1,235 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License 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. + */ +package org.apache.camel.component.aws.ses; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Date; +import java.util.Enumeration; + +import javax.activation.DataHandler; +import javax.mail.Address; +import javax.mail.Flags; +import javax.mail.Message; +import javax.mail.MessagingException; +import javax.mail.Multipart; + +public class MockMessage extends Message { + + @Override + public int getSize() throws MessagingException { + return 0; + } + + @Override + public int getLineCount() throws MessagingException { + return 0; + } + + @Override + public String getContentType() throws MessagingException { + return null; + } + + @Override + public boolean isMimeType(String mimeType) throws MessagingException { + return false; + } + + @Override + public String getDisposition() throws MessagingException { + return null; + } + + @Override + public void setDisposition(String disposition) throws MessagingException { + } + + @Override + public String getDescription() throws MessagingException { + return null; + } + + @Override + public void setDescription(String description) throws MessagingException { + } + + @Override + public String getFileName() throws MessagingException { + return null; + } + + @Override + public void setFileName(String filename) throws MessagingException { + } + + @Override + public InputStream getInputStream() throws IOException, MessagingException { + return null; + } + + @Override + public DataHandler getDataHandler() throws MessagingException { + return null; + } + + @Override + public Object getContent() throws IOException, MessagingException { + return null; + } + + @Override + public void setDataHandler(DataHandler dh) throws MessagingException { + } + + @Override + public void setContent(Object obj, String type) throws MessagingException { + } + + @Override + public void setText(String text) throws MessagingException { + } + + @Override + public void setContent(Multipart mp) throws MessagingException { + } + + @Override + public void writeTo(OutputStream os) throws IOException, MessagingException { + } + + @Override + public String[] getHeader(String header_name) throws MessagingException { + return null; + } + + @Override + public void setHeader(String header_name, String header_value) + throws MessagingException { + } + + @Override + public void addHeader(String header_name, String header_value) + throws MessagingException { + // TODO Auto-generated method stub + + } + + @Override + public void removeHeader(String header_name) throws MessagingException { + } + + @Override + public Enumeration getAllHeaders() throws MessagingException { + return null; + } + + @Override + public Enumeration getMatchingHeaders(String[] header_names) + throws MessagingException { + return null; + } + + @Override + public Enumeration getNonMatchingHeaders(String[] header_names) + throws MessagingException { + return null; + } + + @Override + public Address[] getFrom() throws MessagingException { + return null; + } + + @Override + public void setFrom() throws MessagingException { + // TODO Auto-generated method stub + + } + + @Override + public void setFrom(Address address) throws MessagingException { + } + + @Override + public void addFrom(Address[] addresses) throws MessagingException { + } + + @Override + public Address[] getRecipients(RecipientType type) + throws MessagingException { + return null; + } + + @Override + public void setRecipients(RecipientType type, Address[] addresses) + throws MessagingException { + } + + @Override + public void addRecipients(RecipientType type, Address[] addresses) + throws MessagingException { + // TODO Auto-generated method stub + + } + + @Override + public String getSubject() throws MessagingException { + return null; + } + + @Override + public void setSubject(String subject) throws MessagingException { + // TODO Auto-generated method stub + + } + + @Override + public Date getSentDate() throws MessagingException { + // TODO Auto-generated method stub + return null; + } + + @Override + public void setSentDate(Date date) throws MessagingException { + } + + @Override + public Date getReceivedDate() throws MessagingException { + return null; + } + + @Override + public Flags getFlags() throws MessagingException { + return null; + } + + @Override + public void setFlags(Flags flag, boolean set) throws MessagingException { + } + + @Override + public Message reply(boolean replyToAll) throws MessagingException { + return null; + } + + @Override + public void saveChanges() throws MessagingException { + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/52495d3c/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/SesComponentSpringTest.java ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/SesComponentSpringTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/SesComponentSpringTest.java index 1fa7d12..4b736c6 100644 --- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/SesComponentSpringTest.java +++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/ses/SesComponentSpringTest.java @@ -18,8 +18,13 @@ package org.apache.camel.component.aws.ses; import java.util.Arrays; import java.util.List; +import java.util.Properties; + +import javax.mail.Message; import com.amazonaws.services.simpleemail.model.SendEmailRequest; +import com.amazonaws.services.simpleemail.model.SendRawEmailRequest; + import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.test.spring.CamelSpringTestSupport; @@ -75,6 +80,24 @@ public class SesComponentSpringTest extends CamelSpringTestSupport { assertEquals("1", exchange.getOut().getHeader(SesConstants.MESSAGE_ID)); } + + @Test + public void sendRawMessage() throws Exception { + final MockMessage mess = new MockMessage(); + + Exchange exchange = template.request("direct:start", new Processor() { + @Override + public void process(Exchange exchange) throws Exception { + exchange.getIn().setBody(mess); + } + }); + + assertEquals("1", exchange.getOut().getHeader(SesConstants.MESSAGE_ID)); + + SendRawEmailRequest sendRawEmailRequest = sesClient.getSendRawEmailRequest(); + assertEquals("f...@example.com", sendRawEmailRequest.getSource()); + assertEquals(2, getTo(sendRawEmailRequest).size()); + } @Test public void sendMessageUsingMessageHeaders() throws Exception { @@ -123,4 +146,8 @@ public class SesComponentSpringTest extends CamelSpringTestSupport { private List<String> getTo(SendEmailRequest sendEmailRequest) { return sendEmailRequest.getDestination().getToAddresses(); } + + private List<String> getTo(SendRawEmailRequest sendEmailRequest) { + return sendEmailRequest.getDestinations(); + } } \ No newline at end of file