2016-05-30 127 views
0

我必须使用javax发送电子邮件。消息的主体是html。它有一个图像标签,我的问题是什么应该是src属性中的值,以便在另一个网络中打开邮件时图像可用。图像放在服务器内的一个名为images的文件夹中。应用程序托管使用apache tomcat 7.损坏的图像标记

这是充当消息正文的html字符串。

String emailBody = "<table width=\"99%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">"+ 
      "<tr>"+ 
      "<td align=\"center\" valign=\"top\" style = \"background-color:#ED1B24;\">"+ 
      "<img src =\""+ 
      "http://myip:8080/Survey_services" + "/images/mrflogo.jpg" + "\">" + 
      "</td>" + 
      "</tr>"+ 
      "<tr>"+ 
      "<td align=\"left\">"+ 
      "<p>Hi "+firstname+"," + "</p></b>"+ 
      "<p>A user account has been created for you, the user name will be your employee id</p></b>"+ 
      "<p>Your Password: "+password+"</p></b>"+ 
      "<p>Kindly change password at your convenience</p></b></b>"+ 
      "<p>Regards,</p></b>"+ 
      "<p>Admin Team</p>"+ 
      "</td>"+ 
      "</tr>"+ 
      "</table>" 

我曾经尝试都http://myip:8080/Survey_serviceshttp://localhost:8080/Survey_services,在这两种情况下在另一台机器打开或从HTML的Gmail.Rest是罚款时,图像不会在邮件中加载。

FYI myip是项目所在机器的ipV4地址。

编辑

根据@比尔香农建议我尝试了以下。

String emailBody = "<table width=\"99%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">"+ 
      "<tr>"+ 
      "<td align=\"center\" valign=\"top\" style = \"background-color:#ED1B24;\">"+ 
      "<img src =\""+ 
      "cid:image" + "\">" + 
      "</td>" + 
      "</tr>"+ 
      "<tr>"+ 
      "<td align=\"left\">"+ 
      "<p>Hi "+firstname+"," + "</p></b>"+ 
      "<p>A user account has been created for you, the user name will be your employee id</p></b>"+ 
      "<p>Your Password: "+password+"</p></b>"+ 
      "<p>Kindly change password at your convenience</p></b></b>"+ 
      "<p>Regards,</p></b>"+ 
      "<p>Admin Team</p>"+ 
      "</td>"+ 
      "</tr>"+ 
      "</table>"; 

mailSession = Session.getDefaultInstance(emailProperties, null); 
     emailMessage = new MimeMessage(mailSession); 
     emailMessage.setFrom(new InternetAddress(data[0]));  
     emailMessage.addRecipient(Message.RecipientType.TO, 
       new InternetAddress(mail));    
     emailMessage.setSubject("Account created");      
     BodyPart messageBodyPart = new MimeBodyPart(); 
     messageBodyPart.setContent(emailBody, "text/html; charset=utf-8"); 
     Multipart multipart = new MimeMultipart();  
     multipart.addBodyPart(messageBodyPart);  
     messageBodyPart = new MimeBodyPart(); 

     DataSource fds = new FileDataSource(
      "path"); 

    messageBodyPart.setDataHandler(new DataHandler(fds)); 
    messageBodyPart.setHeader("Content-ID", "<image>"); 
    multipart.addBodyPart(messageBodyPart); 
    emailMessage.setContent(multipart); 

我不能弄清楚我应该提供什么值,我试图通过使用request.getServletContext()。getRealPath(“/”),其中请求是请求对象,提供在服务器中的文件的路径该servlet并在末尾添加文件夹和文件名。当我这样做时,抛出异常。

这是堆栈跟踪。

javax.mail.MessagingException:发送消息时发生IOException; 嵌套的异常是: java.io.FileNotFoundException:D:\ workspace.metadata.plugins \ org.eclipse.wst.server.core \ tmp0 \ wtpwebapps \ Survey_services(访问被拒绝) at com.sun.mail.smtp .SMTPTransport.sendMessage(SMTPTransport.java:1290) at email.GmailClass.send(GmailClass.java:227) at servlets.CreateUser.doPost(CreateUser.java:168) at javax.servlet.http.HttpServlet.service (HttpServlet.java:650) at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache .catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.tomc at.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter( ApplicationFilterChain.java:208) 在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 的组织。 apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) at org.apache.catalina.valves.ErrorReportValve.invoke( ErrorReportValve.java:103) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLo gValve.java:956) 在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436) 在有机apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078) at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:625) at org.apache.tomcat.util.net。4Endpoint $ SocketProcessor.doRun(AprEndpoint.java:2517) at org.apache.tomcat.util.net.AprEndpoint $ SocketProcessor.run(AprEndpoint.java:2506) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor。 java:1142) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) 引起:java.io.FileNotFoundException:D:\ workspace.metadata.plugins \ org.eclipse.wst.server.core \ tmp0 \ wtpwebapps \ Survey_services(Access被拒绝) at java.io.FileInputStream.open0(Native Method) at java.io.FileInputStream.open(FileInputStream.java:195) at java.io.F ileInputStream。(FileInputStream.java:138) at javax.activation.FileDataSource.getInputStream(FileDataSource.java:97) at javax.activation.DataHandler.writeTo(DataHandler.java:305) at javax.mail.internet.MimeBodyPart .writeTo(MimeBodyPart.java:1645) at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:961) at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:553) at com.sun .java中的javax.activation.DataHandler.writeTo(DataHandler.java:317) 上的.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:81) at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:889) .mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1645) at javax。 mail.internet.MimeMessage.writeTo(MimeMessage.java:1850) 在com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1241) ...... 25多个

任何帮助表示赞赏。

+0

您尝试加载的映像不能在线工作,因为localhost。 – Jer

+0

@ C0dekid我想出了那部分,你能建议我应该做什么,因为它在网上工作? – Abhishek

+0

您可以将图像上传到在线服务? – Jer

回答

1

很明显,URL必须正确指向服务器上的映像,您可以通过在另一个网络上的浏览器中打开URL来测试该映像。即使如此,许多邮件阅读器默认情况下不会在远程服务器上打开图像。唯一的解决方法是include the image in the message itself by creating a multipart/related message

+0

谢谢,我会试试这个。 – Abhishek

+0

我对该帖子进行了编辑。如果您可以查看它,这将会有所帮助。 – Abhishek

+0

您需要将其更改为'new MimeMultipart(“related”)'。至于你得到的例外,你确认你使用的文件名是图像文件实际存储的位置吗? –