- - PR -
java mailのプログラムをjava servletにしようとしたのですが、
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2009-01-14 20:21
java mailを応用したプログラムを作っており、
サーブレットではなく普通のプログラムとして作ったサンプルプログラムを java servletにしようとしたのですがうまくいきません。 具体的には別のサーブレットからスコープで受け取った値をjava mailに渡して メールを送信するようにしたいのですが、 該当サーブレットではout.printlnで値はちゃんとスコープでは表示されているのですが、 肝心のメールが送信されませんでした。 どこに原因があるのか分かりません。 サンプルプログラムとservletのソースコードを書きます。 原因が分からず混沌としておりソースコードをそのまま載せるという不躾申し訳ありません。 サーブレットではないjavaのサンプルプログラム: import java.util.*; import java.io.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class Mailsender1{ private final static String SMTP_HOST_NAME = "SMTPサーブレット名"; public static void send( String from, // 送信元メールアドレス String to, // 宛先メールアドレス String subject, // メール題名 String body){ // メール本文 try { // メール送信準備 Properties props = new Properties(); props.put("mail.smtp.host", SMTP_HOST_NAME); Session session = Session.getDefaultInstance(props, null); // メール作成 MimeMessage mimeMessage = new MimeMessage(session); mimeMessage.addFrom(InternetAddress.parse(from)); mimeMessage.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to)); mimeMessage.setSubject(subject, "iso-2022-jp"); mimeMessage.setContent(body, "text/html;charset=iso-2022-jp"); mimeMessage.setSentDate(new Date()); mimeMessage.setHeader("Content-Transfer-Encoding", "7bit"); //確認用outprint System.out.println(from); System.out.println(to); System.out.println(subject); System.out.println(body); // 送信 Transport.send(mimeMessage); } catch (Exception e) { e.printStackTrace(); } } } 該当java servlet: import java.util.*; import java.io.*; import java.text.*; import javax.servlet.*; import javax.servlet.http.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class Mailsender1 extends HttpServlet{ private final static String SMTP_HOST_NAME = "*****.ocn.ne.jp"; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ //(1)sessionスコープのデータを取得 HttpSession gets = request.getSession(); String from = "******@gmail.com"; // 送信元メールアドレス String to = "******@******.ocn.ne.jp"; // 宛先メールアドレス String subject = "onmailからの確認のご案内"; // メール題名 String body = "テストhttp://www.yahoo.co.jp"; // メール本文 try { // メール送信準備 Properties props = new Properties(); props.put("mail.smtp.host", SMTP_HOST_NAME); Session session = Session.getDefaultInstance(props, null); // メール作成 MimeMessage mimeMessage = new MimeMessage(session); mimeMessage.addFrom(InternetAddress.parse(from)); mimeMessage.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to)); mimeMessage.setSubject(subject, "iso-2022-jp"); mimeMessage.setContent(body, "text/html;charset=iso-2022-jp"); mimeMessage.setSentDate(new Date()); mimeMessage.setHeader("Content-Transfer-Encoding", "7bit"); //確認用outprint response.setContentType("text/html; charset=Shift_JIS"); PrintWriter out = response.getWriter(); //(2)取得したデータの表示 out.println("<HTML>"); out.println("<BODY>"); out.println("from:" + from); out.println("<BR>"); out.println("to:" + to); out.println("<BR>"); out.println("subject:" + subject); out.println("<BR>"); out.println("body:" + body); out.println("<BR>"); out.println("</BODY>"); out.println("</HTML>"); // 送信 Transport.send(mimeMessage); } catch (Exception e) { e.printStackTrace(); } } } | ||||
|
投稿日時: 2009-01-14 20:26
1つ提案、Javaはオブジェクト指向であることから
メールを送信するクラスとその他処理をするクラスを分けてみてはいかが? ごちゃっと手続き型で書くよりは問題の発見はしやすいです。 | ||||
|
投稿日時: 2009-01-14 20:52
分けるというのはservletの方のプログラムで一度受信してそれを実行すると言うことでしょうか?
それとも、新たにクラスファイルをつくりそこで受信して実行すると言うことでしょうか? あまり、オブジェクト指向に慣れていません。申し訳ありません。 | ||||
|
投稿日時: 2009-01-15 09:25
メール送信プログラムは
単体で動くのでしたら Servletからそのメールプログラムを 実行してあげればいいと思います。 単体の場合mainに実装しているのを Servletの方から呼び出してあげるようにすれば OKです。 | ||||
|
投稿日時: 2009-01-16 20:24
呼び出し方なのですが
public class onmail extends HttpServlet{ /*HTTP POST リクエストの処理*/ public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ Mailsender1 mb = new Mailsender1(); mb.send("送信先アドレス","送信元アドレス","テスト","テストhttp://www.yahoo.co.jp"); response.sendRedirect("kaptcha.html");//こちらは関係ないですかね。 } } で呼び出すことが出来るのでしょうか? あすかさんの仰る方法を試したのですが原因が分からず断念しました。 | ||||
|
投稿日時: 2009-01-17 09:52
ぶっちゃけると、エラーメッセージでてないか? | ||||
|
投稿日時: 2009-01-18 12:21
汀様いいえ、表示されませんでした。
以前掲載したソースは端折っていたので今回は全文のソースを書いてみたいと思います。 @メール送信プログラムに依頼するプログラム import java.io.*; import java.util.*; import java.text.*; import javax.servlet.*; import javax.servlet.http.*; public class onmail extends HttpServlet{ /*HTTP POST リクエストの処理*/ public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ //エンコード request.setCharacterEncoding("Shift_JIS"); //FORMの値取得 String myaddress = request.getParameter("myaddress");//送信元アドレス String address = request.getParameter("address");//送信先アドレス String title = request.getParameter("title");//タイトル String naiyou = request.getParameter("naiyou");//内容 String date = request.getParameter("ym") + request.getParameter("day") + request.getParameter("time") + "00";//送信年・月・日・時刻 //IDの作成 SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd"); String id1 = sdf.format(new Date()); int rondom1 = (int)Math.round(Math.random()*10000); String id2 = String.valueOf(rondom1); String ID = id1 + id2; //表示・出力処理 response.setContentType("text/html; charset=Shift_JIS");//表示形式設定 PrintWriter out = response.getWriter();//出力処理をメソッド化 //HttpSessionスコープによるインタフェースのオブジェクトを取得 HttpSession session = request.getSession(); //useridデータをsessionスコープで保存 session.setAttribute("ID",ID); session.setAttribute("myaddress",myaddress); session.setAttribute("address",address); session.setAttribute("title",title); session.setAttribute("naiyou",naiyou); session.setAttribute("date", date); Mailsender1 mb = new Mailsender1(); mb.send("*****@titan.ocn.ne.jp","*****@titan.ocn.ne.jp","テスト","テストhttp://www.yahoo.co.jp"); response.sendRedirect("kaptcha.html"); } } Aそれを受け取って送信するプログラム import java.util.*; import java.io.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class Mailsender1{ private final static String SMTP_HOST_NAME = "titan.ocn.ne.jp"; public static void send( String from, // 送信元メールアドレス String to, // 宛先メールアドレス String subject, // メール題名 String body){ // メール本文 try { // メール送信準備 Properties props = new Properties(); props.put("mail.smtp.host", SMTP_HOST_NAME); Session session = Session.getDefaultInstance(props, null); // メール作成 MimeMessage mimeMessage = new MimeMessage(session); mimeMessage.addFrom(InternetAddress.parse(from)); mimeMessage.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to)); mimeMessage.setSubject(subject, "iso-2022-jp"); mimeMessage.setContent(body, "text/html;charset=iso-2022-jp"); mimeMessage.setSentDate(new Date()); mimeMessage.setHeader("Content-Transfer-Encoding", "7bit"); //確認用outprint System.out.println(from); System.out.println(to); System.out.println(subject); System.out.println(body); // 送信 Transport.send(mimeMessage); } catch (Exception e) { e.printStackTrace(); } } } | ||||
|
投稿日時: 2009-01-21 13:58
現状は
サーブレットおよびアプリケーションをweb.xmlに登録して、classesに配備しています。 しかし、実行が出来ません。 また、エラー構文としてUnsupportedEncodingException eを使うと MessagingExceptionがコンパイル時に設定されていないという表示が出てきます。 |
1|2|3
次のページへ»