2012-08-06 146 views
0

我有以下代码:问题与SES附件发送电子邮件

try{ 
     Properties props = new Properties(); 
     Session session = Session.getDefaultInstance(props, null); 
    Message msg = new MimeMessage(session); 
    msg.setSubject(emailSubjectTxt); 
    msg.setFrom(new InternetAddress(emailFromAddress)); 
    msg.setRecipient(
     Message.RecipientType.TO, 
     new InternetAddress("[email protected]")); 

    MimeMultipart mp = new MimeMultipart(); 
    BodyPart part = new MimeBodyPart(); 
    part.setContent(emailMsgTxt, "text/html"); 
    mp.addBodyPart(part); 
    msg.setContent(mp); 
    MimeBodyPart attachment = new MimeBodyPart(); 
    attachment.setFileName("SupportBySkill.pdf"); 
    BufferedInputStream bis = new BufferedInputStream(
      SendMail.class.getResourceAsStream("SupportBySkill.pdf")); 

    attachment.setContent(bis, "application/pdf"); 
    mp.addBodyPart(attachment); 

     // Capture the raw message 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    msg.writeTo(out); 

    RawMessage rm = new RawMessage(); 
    rm.setData(ByteBuffer.wrap(out.toString().getBytes())); 

    ClientConfiguration cc = new ClientConfiguration(); 
    cc.setHttpClientFactory(new HttpClientFactory() { 
     public HttpClient createHttpClient(ClientConfiguration config) { 
      return new DefaultHttpClient(new GAEConnectionManager(), 
        new BasicHttpParams()); 
     } 
    }); 

    // Set AWS access credentials 
    AmazonSimpleEmailServiceClient client = new AmazonSimpleEmailServiceClient(
      new BasicAWSCredentials("XXXXXX", 
        "XXXXXX"), cc); 

    // Call Amazon SES to send the message 
    try { 
     client.sendRawEmail(new SendRawEmailRequest().withRawMessage(rm)); 
    } catch (AmazonClientException e) { 
     System.out.println(e.getMessage()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

}catch(Exception e){e.printStackTrace(); 
log.severe("Could not send email. with error" + e.getMessage()); 
} 

但是在谷歌应用程序引擎的代码失败,错误: 无法发送电子邮件。与errorno对象DCH MIME类型应用程序/ pdf

请告知可能是错的。调试时出现此错误:

msg.writeTo(out); 

回答

1

Amazon SES具有允许的文件类型的有限列表,并且附加的文件名后缀和MIME类型必须匹配。有关允许的MIME类型列表,请参阅http://docs.amazonwebservices.com/ses/latest/DeveloperGuide/MIMETypes.html

我记得我很难让附件与SES一起工作 - 在某些情况下,由于某些JavaMail错误,MIME类型可能会丢失(不会出现在生成的原始邮件正文中)。

不管怎样,下面是对我的作品的片段:我已经使用

byte[] bytes = getMyFileBytes(); 
DataSource ds = new ByteArrayDataSource(bytes, getMyMimeType()); 
MimeBodyPart attachment = new MimeBodyPart(); 
attachment.setDataHandler(new DataHandler(ds)); 
attachment.setHeader("Content-Type", getMyMimeType()); 
attachment.setFileName(getMyFilename()); 
multipart.addBodyPart(attachment);