- PR -

Tomcatでメールを送るときの設定(OS固有の問題?)

投稿者投稿内容
こくぼ
大ベテラン
会議室デビュー日: 2003/08/11
投稿数: 229
お住まい・勤務地: 国境の南、太陽の西。
投稿日時: 2003-09-29 01:16
Debian Gnu/Linuxでtomcatを使ったメール送信でのエラーについて対処法がわからないままです。ご存知の方がいらっしゃいましたら教えていただきたいと思って投稿します

ちなみにぼくはwin2000で作成したものをLinuxで稼動させるようにしています。win2000では問題なくメール送信はできました。利用目的は趣味と学術目的の範囲内です。

OS Debian Gnu/Linux3.0(woody)
apt-line http://ftp.jp.debian.org sid
tomcat tomcat4
sdk j2sdk1.4(Blackdown)

メール送信のソース部分
------------------------------
Context initialContext = new InitialContext();
Session session = (Session) initialContext.lookup("java:comp/env/mail/Session");
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(送信元));
message.setSentDate(new Date());
InternetAddress dests[] = new InternetAddress[送信数];
System.out.println("Send for...");
for(int i = 0; i < 送信数;i++ ){
dests[i] = new InternetAddress(送信先);
}
message.setRecipients(Message.RecipientType.TO, dests);
message.setSubject(題名, "ISO-2022-JP");
message.setText(本文, "ISO-2022-JP");
Transport.send(message);
------------------------------

web.xml
------------------------------
<resource-ref>
<res-ref-name>mail/Session</res-ref-name>
<res-type>javax.mail.Session</res-type>
<res-auth>Container</res-auth>
</resource-ref>
------------------------------

server.xml
------------------------------
<Resource name="mail/Session" auth="Container"
type="javax.mail.Session"/>
<ResourceParams name="mail/Session">
<parameter>
<name>mail.smtp.host</name>
<value>smtpサーバーのアドレス</value>
</parameter>
</ResourceParams>

実際送る場面になると
-------------------------
javax.servlet.ServletException: Cannot create resource instance
at servlet.BBSRegistServlet.sendMail(BBSRegistServlet.java:128)
at servlet.BBSRegistServlet.doPost(BBSRegistServlet.java:93)
省略
javax.naming.NamingException: Cannot create resource instance
at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:189)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:301)
省略
-------------------------
となってしまいます。この「Cannot create resource instance」というのがわからなくてgoogleで検索しても欲しい情報が出てきません。

catalina.outには
-------------------------
Sep 29, 2003 5:00:44 AM org.apache.jk.server.JkCoyoteHandler action
INFO: RESET
Sep 29, 2003 5:06:31 AM org.apache.jk.common.ChannelSocket processConnection
INFO: connection timeout reached
-------------------------
となっています。timeoutということはメールサーバーとのコネクションがとれていないということでしょうか?windowsではコネクションをとれるのにLinuxではできないのはなぜ…

いままで起こってきた問題はすべてインターネットで検索して解決してきのですが、今回ばかりは手が出せなくてお手上げ状態です。

win2000では問題なく送信できたのでメールサーバーは問題ないと思います。

ご存知かたいらっしゃいましたらお願いします


(catalina.outの情報を追記しました)
[ メッセージ編集済み 編集者: こくぼ 編集日時 2003-09-29 05:06 ]

[ メッセージ編集済み 編集者: こくぼ 編集日時 2003-09-29 06:36 ]
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2003-09-29 09:36
ども、ほむらです。
プログラムに問題があるのかOSの設定に問題があるのかを
切り分けするためにもまずはTELNET ツールを利用して
メール送信のエミュレートをしてみるのはどうでしょうか?

ここで、接続が出来ないようであればLinux側の設定に問題があると思いますし
メールが送信できた場合にはプログラムの問題ということになると思います。

#LinuxからWindowsへは通信が出来るんですよね?
おがわ
大ベテラン
会議室デビュー日: 2001/08/01
投稿数: 199
お住まい・勤務地: 千葉県
投稿日時: 2003-09-29 10:41
(JDBCデータソースをJNDIで参照できないトラブルとよく似てますけど...)
JavaMailのセッションをじかに取得して動作確認を行ってみましたか?

Context initialContext = new InitialContext();
Session session = (Session) initialContext.lookup("java:comp/env/mail/Session");
        ↓
Session session = Session.getDefaultInstance(...);
こくぼ
大ベテラン
会議室デビュー日: 2003/08/11
投稿数: 229
お住まい・勤務地: 国境の南、太陽の西。
投稿日時: 2003-09-29 23:59
ほむらさん、SuperCreekeさん、アドバイスありがとうございます。

お二人に指摘していただいたことは事前に予測できた対処法でした。自分の勉強不足を感じてしまいます。

ほむらさん、
ほむらさんに指摘していただいた通り、LinuxからTelnetコマンドでメールの送信を行ってみたところ、問題なく送れました。通信の問題はないみたいです。

>#LinuxからWindowsへは通信が出来るんですよね?

ぼくの勉強不足でごめんなさい。これはどういうことでしょうか?

SuperCreekeさん、
プログラムへ直で打つことはここに投稿したあとに自分でも思いつきました。対処法として普通に思い当たりそうなことなのに恥ずかしい限りです。
さっそくプログラム内で記述したものをwin2000で作成。win2000でメール送信が可能なことを確認してからLinuxへ移動。稼動させてみたところ、

javax.mail.NoSuchProviderException: No provider for Address type: rfc822

というエラーが発生しました。
Googleで検索したところ、

http://nonzero.hp.infoseek.co.jp/pgzakki.shtml

このページにmail.jarへのCLASSPATHの設定ができていないときに発生するとありました。
言われた通りCLASSPATHを

/usr/share/tomcat4/common/lib/mail.jar

に設定して試したところ。

…結果変わらず…でした。

http://www.sk-jp.com/cgi-bin/treebbs.cgi?log=1155

に、CLASSPATHを設定しているのに発生するエラーについての質問をされている方がいるのですが問題が解決されずに終わってしまっています。

http://java-house.jp/ml/archive/j-h-b/038985.html

にもGoogleで検索すると出てくるのですが、このサーバーへの移動ができません

そこで、、
英文のサイトで頑張って調べてみたところSunのサイトでJavaMail1.3をダウンロードしてsmtp.jarを追加してね、みたいなことが書いてあったので実際にダウンロードして実行してみたら以前のエラーは出なくなりました。ですが、その代わりに自分では解決することが困難なエラーが出てきました。

javax.servlet.ServletException: Sending failed;
nested exception is:
class javax.mail.MessagingException: IOException while sending message;
nested exception is:
javax.activation.UnsupportedDataTypeException: no object DCH for MIME type text/plain; charset=ISO-2022-JP

以上のエラーです。直感的に「no object DCH for MIME type text/plain; charset=ISO-2022-JP」のあたりに原因があると思い、検索した結果。。
悲しいことに英文のページしかヒットしませんでした。

それでも頑張って調べたところ「mailcap」というファイルがおかしいらしい。。のですがぼくの英文の読解力ではこれまでが限界で具体的にどこを直せば良いのかわかりません(+_+)

何か思い当たることはありますでしょうか?
もし助言をしていただけるお時間の余裕がありましたら,是非ともよろしくお願いしますm(_ _)m
うのきち
ベテラン
会議室デビュー日: 2003/02/17
投稿数: 55
投稿日時: 2003-09-30 00:54
この辺が参考になりません?

http://java-house.jp/ml/archive/j-h-b/040526.html
こくぼ
大ベテラン
会議室デビュー日: 2003/08/11
投稿数: 229
お住まい・勤務地: 国境の南、太陽の西。
投稿日時: 2003-09-30 01:25
うのきちさん助言ありがとうございます。

ぼくもGoogleで検索しているときに
http://java-house.jp
のページがよく表示されるのですが、ここ数日前からこのサイトにアクセスできなくなっているんです。(これを書いている前にも試してみましたがダメでした)
これまた原因不明で困ってしまっているのですが…

追記:お蔭様でサーバーとのセッションは確立できたみたいです。

[ メッセージ編集済み 編集者: こくぼ 編集日時 2003-09-30 01:26 ]
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2003-09-30 09:55
ども、ほむらです。
引用:

>#LinuxからWindowsへは通信が出来るんですよね?
ぼくの勉強不足でごめんなさい。これはどういうことでしょうか?


メールサーバーがWindpws側にあると思ってしまって^^;;;;
勘違いしてました。(Linuxあるのにおかしいなとは感じていたのですが(笑)

# java-house.jp 今いってみたらいけました。。。
# キャッシュだったらごめんなさい。
うのきち
ベテラン
会議室デビュー日: 2003/02/17
投稿数: 55
投稿日時: 2003-09-30 13:55
せっかく、Googleを使っているんですから、そういう時は、キャッシュを見るといいですよ。

引用:

こくぼさんの書き込み (2003-09-30 01:25) より:
ぼくもGoogleで検索しているときに
http://java-house.jp
のページがよく表示されるのですが、ここ数日前からこのサイトにアクセスできなくなっているんです。(これを書いている前にも試してみましたがダメでした)
これまた原因不明で困ってしまっているのですが…


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