2016-05-30 21 views
0

私は、javaxを使用してメールを送信する必要があります。メッセージ本文はhtmlです。それはイメージタグを持っています、私の質問は、メールが別のネットワークで開かれたときにイメージが利用できるようにsrc属性の値にする必要があります。画像は、画像と呼ばれるフォルダ内のサーバー内に配置されます。壊れた画像のタグ

これはメッセージ本文として機能する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>" 

私は別のマシンにまたは罰金されるHTMLのGmail.Restから開いたときのいずれかの場合には、画像をメールにロードされていない、http://myip:8080/Survey_serviceshttp://localhost:8080/Survey_servicesの両方を試してみました。

FYI myipは、プロジェクトがホストされているマシンのipV4アドレスです。

EDIT

@Bill Shannonによると、私は次のことを試しました。

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を(「/」)を使用してサーバにファイルのパスを与える試みサーブレットを追加し、最後にフォルダとファイル名を追加します。私はこれを行うと例外がスローされます。

ここにスタックトレースがあります。

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) email.GmailClass.send(GmailClass.java:227) 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) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at org。 apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) (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 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436) at org (AbstractProtocol.java:625) at org.apache.tomcat.util.net。java.util.concurrent.ThreadPoolExecutor.runWorkerでorg.apache.tomcat.util.net.AprEndpoint $ SocketProcessor.runでAprEndpoint $ SocketProcessor.doRun(AprEndpoint.java:2517) (AprEndpoint.java:2506) (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(ネイティブメソッド) 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 .mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:81) at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:889) at javax.activation.DataHandler.writeTo(DataHandler.java:317) at javax .mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1645) (javax。 mail.internet.MimeMessage.writeTo com.sun.mail.smtp.SMTPTransport.sendMessageで(MimeMessage.java:1850) (SMTPTransport.java:1241)より ... 25

すべてのヘルプは高く評価され。

+0

ロードしようとしているイメージは、localhostのためオンラインでは動作しません。 – Jer

+0

@ C0dekid私はその部分を理解しました。オンラインで作業するためには、何をすべきかを提案できますか? – Abhishek

+0

イメージをオンラインサービスにアップロードできますか? – Jer

答えて

1

明らかに、URLはサーバー上のイメージを正しく指し示す必要があります。このURLは、別のネットワーク上のブラウザでURLを開いてテストできます。それでも、多くのメールリーダーは、デフォルトでリモートサーバー上のイメージを開くことはありません。唯一の回避策はinclude the image in the message itself by creating a multipart/related messageです。

+0

ありがとう、私はこれを試してみましょう。 – Abhishek

+0

私は投稿を編集しました。あなたがそれを見ることができれば助けになります。 – Abhishek

+0

これを 'new MimeMultipart(" related ")'に変更する必要があります。例外として、使用しているファイル名がイメージファイルが実際に格納されている場所であることを確認しましたか? –

関連する問題