2015-04-08 2 views
0

Я пытаюсь добавить заголовок «List-Unsubscribe» в моих отправленных сообщениях (через amazon ses), но когда я вижу полученное письмо, в нем нет такого заголовка. Мне нужно это, чтобы уменьшить количество жалоб на спам и улучшить прибыльность и репутацию.Пользовательский заголовок Amazon SES List-Unsubscribe не работает

SendEmailRequest sendEmailRequest = new SendEmailRequest(); 
sendEmailRequest.putCustomRequestHeader(UNSUBSCRIBE_HEADER, unsuscribeURL); 

PS: Использование других провайдеров, таких как Mandrill или Sendgrid это работает, но я действительно нуждается в амазонке

ответ

3

Итак ... я нашел обходной путь. Если вы хотите добавить пользовательский заголовок к своему сообщению, всегда используйте RawMessage, а не простой.

Что-то вроде этого:

SendRawEmailRequest sendRawEmailRequest = new SendRawEmailRequest(); 
    RawMessage rawMessage = null; 
    rawMessage = buildSimpleRawMessage(...); 
    sendRawEmailRequest.setRawMessage(rawMessage); 


private RawMessage buildSimpleRawMessage(String subject, String message, Attachment attachment) { 
    RawMessage rawMessage = null; 
    try { 
     // JavaMail representation of the message 
     Session s = Session.getInstance(new Properties(), null); 
     MimeMessage mimeMessage = new MimeMessage(s); 

     // Subject 
     mimeMessage.setSubject(subject); 

     // Add a MIME part to the message 
     MimeMultipart mimeBodyPart = new MimeMultipart(); 
     BodyPart part = new MimeBodyPart(); 
     part.setContent(message, "text/html"); 
     mimeBodyPart.addBodyPart(part); 

     // Add a attachement to the message 
     if(attachment!=null){ 
      part = new MimeBodyPart(); 
      DataSource source = null; 
      source = new ByteArrayDataSource(attachment.getBuf(), attachment.getMimeType()); 
      part.setDataHandler(new DataHandler(source)); 
      part.setFileName(attachment.getFileName()); 
      mimeBodyPart.addBodyPart(part); 
     } 

     mimeMessage.setContent(mimeBodyPart); 
     mimeMessage.addHeader(UNSUBSCRIBE_HEADER, unsubscribeURL); 

     // Create Raw message 
     ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
     mimeMessage.writeTo(outputStream); 
     rawMessage = new RawMessage(ByteBuffer.wrap(outputStream.toByteArray())); 
    } catch (Exception e) { 
     logger.error("There was a problem creating mail attachment", e); 
     throw Throwables.propagate(e); 
    } 
    return rawMessage; 
}