问题
I have been reading the blogs and have tried numerous implementations but have still failed to get an image attached to an email that I\'m sending through GMail using java. I downloaded all the jars and added GMailSender.java, GMailAuthenticator.java, and JSSEProvider.java and I\'m able to send regular e-mails just fine. The way I\'ve tried doing it is shown below, with the middle part that\'s commented out being the part I had hoped would add the image. Below that is the output on the logcat when I try to execute this. Surely I am missing something pretty simple. Could someone point it out to me please? Thanks in advance.
public synchronized void sendMail(String subject, String body, String sender, String recipients) throws Exception {
try {
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
MimeMessage message = new MimeMessage(session);
DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), \"text/plain\"));
message.setSender(new InternetAddress(sender));
message.setSubject(subject);
message.setDataHandler(handler);
/*
// Create your new message part
BodyPart imgPart = new MimeBodyPart();
// Create a related multi-part to combine the parts
MimeMultipart multipart = new MimeMultipart(\"related\");
multipart.addBodyPart(imgPart);
String fileName = \"http://.../sampleBarcode.png\";
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if (classLoader == null) {
classLoader = this.getClass().getClassLoader();
if (classLoader == null) {
System.out.println(\"IT IS NULL AGAIN!!!!\");
}
}
DataSource ds = new URLDataSource(classLoader.getResource(fileName));
imgPart.setDataHandler(new DataHandler(ds));
imgPart.setHeader(\"Content-ID\", \"<logoimg_cid>\");
multipart.addBodyPart(imgPart);
message.setContent(multipart);
*/
if(recipients.indexOf(\',\') > 0) {
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
}
else message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
Transport.send(message);
}
catch(Exception e){Log.e(\"EMAIL_ERROR\",e.getMessage(), e);}
}
null
java.lang.NullPointerException
at javax.activation.URLDataSource.getContentType(URLDataSource.java:91)
at javax.activation.DataHandler.getContentType(DataHandler.java:218)
...
...
(plus some more)
回答1:
I modified the function to accept a File parameter and attach it to the email, here it is
public synchronized void sendMail(String subject, String body, String sender, String recipients, File attachment) throws Exception {
try{
MimeMessage message = new MimeMessage(session);
message.setSender(new InternetAddress(sender));
message.setSubject(subject);
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setText(body);
MimeBodyPart mbp2 = new MimeBodyPart();
FileDataSource fds = new FileDataSource(attachment);
mbp2.setDataHandler(new DataHandler(fds));
mbp2.setFileName(fds.getName());
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp1);
mp.addBodyPart(mbp2);
message.setContent(mp);
if (recipients.indexOf(',') > 0)
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients));
else
message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
Transport.send(message);
}catch(Exception e){
}
}
来源:https://stackoverflow.com/questions/6005983/sending-email-with-attachment-through-gmailsender