• ベストアンサー

添付ファイルの送信プログラムについて

JSPとServletで作成された添付ファイル付きメールの送信プログラムがあります。以下にその一部を掲載します。 ***** SendForm.jsp ****** <form action="test/servlet/SendMail"> <input type="submit" value="添付する"> </form> ************************* ***** SendMail.java ***** public void doGet( 略 ) throws 略 { try { Properties props = System.getProperties(); props.put("mail.smtp.host", "xxx.xxx.xxx.xxx"); Session session = Session.getDefaultInstance(props, null); MimeMessage msg = new MimeMessage(session); msg.setFrom(new InternetAddress("test@test.co.jp", "テスト","iso-2022-jp")); msg.setRecipients(Message.RecipientType.TO, "test@test.co.jp"); msg.setSubject("テストメール!" , "iso-2022-jp"); MimeBodyPart mbp1 = new MimeBodyPart(); mbp1.setText("これはテストメールです。" , "iso-2022-jp"); MimeBodyPart mbp2 = new MimeBodyPart(); FileDataSource fds = new FileDataSource("テスト.xls"); mbp2.setDataHandler(new DataHandler(fds)); mbp2.setFileName(MimeUtility.encodeWord(fds.getName())); Multipart mp = new MimeMultipart(); mp.addBodyPart(mbp1); mp.addBodyPart(mbp2); msg.setContent(mp); msg.setSentDate(new Date()); Transport.send(msg); } catch(Exception e) { ( 略 ) } } ************************* 字数が制限されていますので、関係ないところは( 略 )とさせていただいています。 SendForm.jspで「添付する」を押して添付ファイルの送信処理を開始すると、HTTPの501番エラーが発生して、ファイルを送信することができなくなってしまいます(例外は一切発生していません)。なぜ例外ではなく501番のエラーが発生するのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

JSPの方のformタグでmethodが指定されていないのでpostで送信されているんでしょう(それが仕様かどうかは知りませんが)。で、postの処理が要求されているのにサーブレットにはdoGet(method=getの処理)しか実装されていないのでHTTP501(Not Implemented:未実装)エラーが返されると。

参考URL:
http://www.asahi-net.or.jp/~ax2s-kmtn/ref/status.html
sumou111
質問者

お礼

回答ありがとうございます。 method="GET"とすると、うまくいきました。ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • chi-kon
  • ベストアンサー率43% (58/132)
回答No.1

ファイルのアップロードするのであれば MultipartとPOSTメソッドでsubmitする必要があったような気がします。 501エラーはサーバへ正常にリクエストが通っていないのではないのでしょうか? サーブレットで一番最初に呼ばれるであろうメソッドまでたどりついていますか? 普通にサーブレットを使っているのであればdoGetメソッドが呼ばれていると思うのですが、直後にデバッグ文をいれてみてください。 そこまでたどり着いていないのであれば JSPを見直す必要がありますね。

sumou111
質問者

お礼

回答ありがとうございます。 字数制限の関係上ここでは書けなかったのですが、ファイルのアップロード処理はこのプログラムが実行される前に完了しています。ここでは単にボタンを押せば送信処理が開始されるプログラムが作りたかったので、doGetメソッドを使用しました。これがいけなかったのでしょうか。 >普通にサーブレットを使っているのであれば >doGetメソッドが呼ばれていると思うのですが、 >直後にデバッグ文をいれてみてください。 >そこまでたどり着いていないのであれば >JSPを見直す必要がありますね。 JSPは問題ないと思いますので、サーブレットの方をもう一度見直して見ます。

すると、全ての回答が全文表示されます。

関連するQ&A