- PR -

java mailのプログラムをjava servletにしようとしたのですが、

投稿者投稿内容
nagase
会議室デビュー日: 2009/01/14
投稿数: 9
投稿日時: 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();
}
}
}
朝日奈 ありす
ベテラン
会議室デビュー日: 2007/10/28
投稿数: 57
お住まい・勤務地: 北の都
投稿日時: 2009-01-14 20:26
1つ提案、Javaはオブジェクト指向であることから

メールを送信するクラスとその他処理をするクラスを分けてみてはいかが?

ごちゃっと手続き型で書くよりは問題の発見はしやすいです。
nagase
会議室デビュー日: 2009/01/14
投稿数: 9
投稿日時: 2009-01-14 20:52
分けるというのはservletの方のプログラムで一度受信してそれを実行すると言うことでしょうか?
それとも、新たにクラスファイルをつくりそこで受信して実行すると言うことでしょうか?

あまり、オブジェクト指向に慣れていません。申し訳ありません。
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2009-01-15 09:25
メール送信プログラムは
単体で動くのでしたら
Servletからそのメールプログラムを
実行してあげればいいと思います。

単体の場合mainに実装しているのを
Servletの方から呼び出してあげるようにすれば
OKです。
nagase
会議室デビュー日: 2009/01/14
投稿数: 9
投稿日時: 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");//こちらは関係ないですかね。
}
}

で呼び出すことが出来るのでしょうか?
あすかさんの仰る方法を試したのですが原因が分からず断念しました。
朝日奈 ありす
ベテラン
会議室デビュー日: 2007/10/28
投稿数: 57
お住まい・勤務地: 北の都
投稿日時: 2009-01-17 09:52
引用:

nagaseさんの書き込み (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");//こちらは関係ないですかね。
}
}

で呼び出すことが出来るのでしょうか?
あすかさんの仰る方法を試したのですが原因が分からず断念しました。



ぶっちゃけると、エラーメッセージでてないか?
nagase
会議室デビュー日: 2009/01/14
投稿数: 9
投稿日時: 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();
}
}
}
nagase
会議室デビュー日: 2009/01/14
投稿数: 9
投稿日時: 2009-01-21 13:58
現状は
サーブレットおよびアプリケーションをweb.xmlに登録して、classesに配備しています。
しかし、実行が出来ません。
また、エラー構文としてUnsupportedEncodingException eを使うと
MessagingExceptionがコンパイル時に設定されていないという表示が出てきます。

スキルアップ/キャリアアップ(JOB@IT)