幼稚園時代「何組」でしたか?

Javaサーブレットでメールを送信したいと思い、こちら(http://www.utilz.jp/wiki/JavaMail1)のサイトで公開されているソースコードを利用してプログラムを作成したのですがエラーが発生してしまいました。

公開されているプログラムだけで実行した際には動いたので動作環境に問題は無いと思います。



public class send_Gmail extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, MessagingException
{

send(
"*********", // gmail アカウント
"*********", // gmail パスワード
"*********", // 送信先
"subject", // サブジェクト
"body"); // 本文

// コンテンツタイプの設定
response.setContentType("text/html;charset=Windows-31J");
// 出力のためのPrintWriterオブジェクトを取得
PrintWriter out = response.getWriter();
// 一連のコンテンツを出力
out.println("<html><head>");
out.println("<title>スクリプトレット</title>");
out.println("</head><body>");
out.println("メールを送信しました<br />");
out.println("</body></html>");
}

private static final Properties PROP;
static {
PROP = new Properties();
PROP.put("mail.smtp.host", "smtp.gmail.com");
PROP.put("mail.smtp.port", "587");
PROP.put("mail.smtp.auth", "true");
PROP.put("mail.smtp.starttls.enable", "true");
}

public void send(
String user,
String password,
String to,
String subject,
String body) throws MessagingException {

Transport transport = null;

try {
Session sess = Session.getInstance(PROP);
MimeMessage mm = new MimeMessage(sess);
mm.setFrom(new InternetAddress(user));
mm.setSubject(subject);
mm.setRecipient(
Message.RecipientType.TO, new InternetAddress(to));
mm.setContent(body, "text/plain; charset=iso-2022-jp");
mm.setHeader("Content-Transfer-Encoding", "7bit");

transport = sess.getTransport("smtp");
transport.connect(user, password);
transport.sendMessage(mm, mm.getAllRecipients());
}
finally {
if (transport != null) {
transport.close();
}
}
}


コンパイルすると

send_Gmail.java:28: Gmail_test.send_Gmail のdoPost(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) は javax.servlet.http.HttpServlet の doPost(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) をオーバーライドできません。オーバーライドされたメソッドは javax.mail.MessagingException をスローしません。
protected void doPost(HttpServletRequest request, HttpServletResponse response)

というエラーが出てしまいます。throwsにMessagingExceptionを記述しないと、今度は記述しろというエラーが出てしまい困っています…解決策を教えて下さい。よろしくお願いします。

A 回答 (1件)

メソッドをオーバーライドする時は、スーパークラスのメソッドでスローされる例外以外はスローできません。


try-catchでMessagingExceptionが発生したときの処理を記述するようにしてください。
スローするのであれば、ServeletExceptionでラップしてください。
    • good
    • 0
この回答へのお礼

catchを記述することで無事動きました!
ありがとうございました。

お礼日時:2011/08/11 14:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!