2012-11-13 2 views
3

Я смог отправить изображение в виде прикрепленного файла по электронной почте с помощью Java. Я сейчас пытаюсь отправить один и тот же образ в теле письма, как это:Отправить изображение в Email Body с помощью Java

public static void main(String[] args) throws NoSuchProviderException, MessagingException { 
    System.out.println("Sending mail..."); 
    Properties props = new Properties(); 
    props.setProperty("mail.smtp.starttls.enable", "true"); 
    props.setProperty("mail.transport.protocol", "smtp"); 
    props.setProperty("mail.smtp.auth", "true"); 
    props.setProperty("mail.smtp.host", "smtp.gmail.com"); 

props.setProperty("mail.smtp.port", "587"); 
    props.setProperty("mail.smtp.user", "mysusername"); 
    props.setProperty("mail.smtp.password", "mypassword"); 

    Session mailSession = Session.getDefaultInstance(props, null); 
    mailSession.setDebug(true); 
    Transport transport = mailSession.getTransport(); 

    MimeMessage message = new MimeMessage(mailSession); 
    message.setSubject("HTML mail with images"); 
    message.setFrom(new InternetAddress("[email protected]")); 
    message.setContent 
     ("<h1>This is a test</h1>" 
     + "<img src=\"C:/Users/pc/Desktop/Photos/Shammah.PNG\">", 
     "text/html"); 
    message.addRecipient(Message.RecipientType.TO, 
     new InternetAddress("[email protected]")); 

    transport.connect();//This is line 46 
    transport.sendMessage(message, 
     message.getRecipients(Message.RecipientType.TO)); 
    transport.close(); 
} 

Я получаю этот выход:

Sending mail... 
DEBUG: setDebug: JavaMail version 1.4ea 
DEBUG: getProvider() returning  javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc] 
DEBUG SMTP: useEhlo true, useAuth true 
Exception in thread "main" javax.mail.AuthenticationFailedException 
at javax.mail.Service.connect(Service.java:306) 
at javax.mail.Service.connect(Service.java:156) 
at javax.mail.Service.connect(Service.java:105) 
at image.in.body.ImageInBody.main(ImageInBody.java:46) 
Java Result: 1 

Почему аутентификации неудачи в то время как я использую правильное имя пользователя и пароль для Моя учетная запись Gmail?

+0

Ошибки касаются аутентификации, а не фактического содержимого тела ... что-то не так в ваших настройках. –

ответ

6

Вы должны объявить свои изображения, как это:

<img src="cid:unique-name-or-id" /> 

Загрузка изображений в MimeBodyPart и соответствовать уникальным имя-или-идентификатор с имя_файла MimeBodyPart.

2

Создайте многопользовательский корпус с контентом в соответствии с строкой и закодируйте в base64 свой образ.

Проверить это SO для некоторых деталей (в Python) Sending Multipart html emails which contain embedded images

1

Во-первых, ознакомьтесь с этой статьей JavaMail FAQ common mistakes.

Затем ознакомьтесь с этой статьей JavaMail FAQ с номером sample code for connecting to Gmail.

Обратите внимание, что нет свойства mail.smtp.password. Поскольку вы не предоставляете пароль, аутентификация не выполняется.

7

см ниже код может использовать полный

class SimpleMail2 { 
    public static void main(String[] args) throws Exception{ 

     System.out.println("Sending mail..."); 
     Properties props = new Properties(); 
     props.put("mail.smtp.host", "smtp.gmail.com"); 
     props.put("mail.smtp.socketFactory.port", "465"); 
     props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
     props.put("mail.smtp.auth", "true"); 
     props.put("mail.smtp.port", "465"); 

     Session mailSession = Session.getDefaultInstance(props, 
     new javax.mail.Authenticator() { 
      protected PasswordAuthentication getPasswordAuthentication() { 
       return new PasswordAuthentication("[email protected]","password"); 
      } 
     }); 
     Message message = new MimeMessage(mailSession); 
     message.setFrom(new InternetAddress("[email protected]")); 
     message.setSubject("HTML mail with images"); 
     message.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]")); 
     message.setText("Dear Mail Crawler," + "\n\n No spam to my email, please!"); 

     MimeMultipart multipart = new MimeMultipart("related"); 
     BodyPart messageBodyPart = new MimeBodyPart(); 
     String htmlText = "<H1>Raghava chary</H1>" + "<img src=\"cid:image\">"; 
     messageBodyPart.setContent(htmlText, "text/html"); 
     multipart.addBodyPart(messageBodyPart); 
     try { 
      messageBodyPart = new MimeBodyPart(); 
      InputStream imageStream = SimpleMail2.class.getClass().getResourceAsStream("/ab/log.gif"); 
      DataSource fds = new ByteArrayDataSource(IOUtils.toByteArray(imageStream), "image/gif"); 
      messageBodyPart.setDataHandler(new DataHandler(fds)); 
      messageBodyPart.setHeader("Content-ID","<image>"); 
      multipart.addBodyPart(messageBodyPart); 
      message.setContent(multipart); 
      Transport.send(message); 
      System.out.println("Done"); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

и добавить org.apache.commons.io.jar.zip и аксиома-Апи-1.2.6.jar и добавить mail.jar и активацию. jar

0

Еще одна распространенная ошибка (бит меня сегодня): заголовок Content-ID для изображения должен быть в < угловых скобках >. Несоблюдение этого требования приведет к поломке некоторых почтовых программ (gmail, OS X 10.10), но не других (Outlook, iOS < = 8.1).

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