2015-02-28 3 views
0

Im пытается отправить электронное письмо с образцом proyect. То, что я пытаюсь сделать, - это образец книжного магазина, пользователь получает форму, которая заполняет ее приказом (имя, ниф, электронная почта, книги ...). Я хочу отправить на этот адрес электронной почты, информацию о заказе, сделанном ранее. Когда я пытаюсь сделать, это показывает следующее сообщение об ошибке:Как отправить электронное письмо на Mule ESB

Root Exception stack trace: 
java.lang.IllegalArgumentException: The required object/property "Email address" is null 
at org.mule.transport.email.MailUtils.stringToInternetAddresses(MailUtils.java:93) 
at org.mule.transport.email.transformers.StringToEmailMessage.transformMessage(StringToEmailMessage.java:113) 
at org.mule.transport.email.transformers.ObjectToMimeMessage.transformMessage(ObjectToMimeMessage.java:54) 
+ 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything) 

Мой поток на XML является:

<smtp:gmail-connector name="Gmail" validateConnections="true" doc:name="Gmail" contentType="text/html" bccAddresses="#[payload.email]" ccAddresses="#[payload.email]" fromAddress="#[payload.email]"/> 
<flow name="Email" doc:name="Email"> 
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8088" doc:name="HTTP" path="Email"/> 
    <http:static-resource-handler resourceBase="docroot" defaultFile="index.html" doc:name="HTTP Static Resource Handler"/> 
</flow> 
<flow name="Correo" doc:name="Correo"> 
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8088" path="Facturacion" doc:name="HTTP" transformer-refs="Java"/> 
    <component doc:name="Generar Pedido" class="org.mule.transformers.EmailTransformer"/> 
    <smtp:outbound-endpoint responseTimeout="10000" doc:name="SMTP" password="pass" port="587" user="email%40gmail.com" from="#[payload.email]" to="#[payload.email]" connector-ref="Gmail" address="#[payload.email]"/> 
</flow> 

А класс трансформатора:

public class EmailTransformer extends AbstractMessageTransformer { 


@Override 
public Object transformMessage(MuleMessage message, String outputEncoding) 
     throws TransformerException { 
    // TODO Auto-generated method stub 
    final Pedido pedido = (Pedido) message.getPayload(); 
    System.out.println("Enviando email a la direccion de correo: "+pedido.getEmail()+"\n\n"); 
    try { 
     MailUtils.stringToInternetAddresses(pedido.getEmail()); 
    } catch (AddressException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    final StringBuilder mailMessage = new StringBuilder("A continuación le enviamos los datos del pedido que nos ha solicitado:").append("\n"); 
    mailMessage.append("Nombre: " + pedido.getNombre()).append("\n"); 
    mailMessage.append("NIF: " + pedido.getNIF()).append("\n"); 
    mailMessage.append("Listado de productos: " + pedido.getProductos()).append("\n"); 
    mailMessage.append("Recibe un cordial saludo. "); 

    message.setOutboundProperty(MailProperties.SUBJECT_PROPERTY, "Información del pedido que nos ha solicitado"); 
    message.setOutboundProperty(MailProperties.TO_ADDRESSES_PROPERTY, pedido.getEmail()); 

    return mailMessage.toString(); 
} 
} 

Любой может мне помочь? Спасибо!

+0

Какую версию мула вы используете? – afelisatti

ответ

2

Я вижу две проблемы в EmailTransformer:

  • Предполагается, что полезная нагрузка сообщение может быть приведен к Pedido, хотя http:inbound-endpoint произведут сообщение, чья полезная нагрузка имеет InputStream типа. Этот актер не может работать.

  • Он не имеет конструктор, который определяет типы, он принимает, что-то вроде:

    public EmailTransformer() 
    { 
        this.registerSourceType(DataTypeFactory.create(Pedido.class)); 
        this.setReturnDataType(DataTypeFactory.STRING); 
    } 
    

Затем нужно будет добавить поток в Pedido трансформатора перед EmailTransformer.

В качестве альтернативы, вы можете реорганизовать EmailTransformer для работы непосредственно с помощью InputStream.

+0

Правда! Трансформатор электронной почты меняет его на трансформатор Gmail Coonnector, и компонент класса идет раньше, я делаю класс Java «Generate Order», где я получаю заказ «полезной нагрузки», и я обновляю значения из класса «Заказ» с датами от полезной нагрузки. –

+0

Спасибо за помощь! –

Смежные вопросы