1

サーブレット経由でメールをトリガーしたいのですが、トリガーされません。コードをスタンドアロン Java アプリケーションとして実行すると、問題なく動作します。以下は私のコードです。
サーブレットで問題が発生しています。サーバーからコードをトリガーできません

package model;

import java.util.Date;
import java.util.Properties;

import javax.mail.*;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.naming.InitialContext;
importjavax.naming.NamingException;

import com.sun.xml.internal.bind.CycleRecoverable.Context;

public class TestJavaMail   
{

    String userid ;
    String password;
    public TestJavaMail(String userid , String password)
    {
        this.userid = userid;
        this.password =password;
    }

        public void process()
        {

        String[] to = {"faiz.akhtar@agnitio-technologies.com","manish.kaushik@agnitio-           technologies.com",
                "sandeep.sharma@agnitio-technologies.com"};
        Properties props = new Properties();   
        props.put("mail.transport.protocol", "smtp");   
        props.put("mail.smtp.host", "smtp.exchangemails.com");   
        props.put("mail.smtp.port", 25);   

        props.put("mail.smtp.user", userid);   
        props.put("mail.smtp.pass", password);   
        props.put("mail.smtp.starttls.enable", "true");   
        props.put("mail.smtp.auth ", "true");   

                                Authenticator auth = new javax.mail.Authenticator()   
        {   
             protected PasswordAuthentication getPasswordAuthentication()   
            {   
                return new PasswordAuthentication(userid, password);   
            }   
        };   

                    Session session = Session.getDefaultInstance(props,auth);   

        try  
        {   
                                MimeMessage msg = new MimeMessage(session);   
            System.out.println("Mimemessage ceated");   
            InternetAddress[] iaFrom = { new InternetAddress(   
                    "moonis.raza@agnitio-technologies.com") };   
            msg.setFrom(iaFrom[0]);   
            InternetAddress[] iaTo =  new InternetAddress[to.length] ;  
            for(int i=0;i<to.length;i++)
            {
                iaTo[i] = new InternetAddress(to[i]);
                msg.addRecipient(Message.RecipientType.TO, iaTo[i]);
            }

            msg.setSubject("Test Java Mail");   
            msg.setSentDate(new Date());   
            msg.setText("Hello, Congrats - It is working\n pls send acknowledgement mail to senderof u get this" +
                    "\n as it is part of project");   
            Transport tran = session.getTransport("smtp");   
            System.out.println("Transport object created......");   
            //tran.setStarttls(true);   
            tran.connect("smtp.exchangemails.com", 25, "moonis.raza@agnitio-           technologies.com", "welcome");   
            //tran.connect();   
            msg.saveChanges();   
            System.out.println("Connect succeeded");   
            tran.sendMessage(msg, msg.getAllRecipients());   
            tran.close();   
            System.out.println("Mail Sent Successfully");   
        }   
        catch (MessagingException mex)   
        {   
            System.out.println("send failed, exception: " + mex);   
        }   
                        }   
}  

サーブレット コードは次のとおりです。

package com.controller;

import java.io.*;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.TestJavaMail;
/**
 * Servlet implementation class emailservice
 */
   public class emailservice extends HttpServlet {


    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws     ServletException, IOException {
        res.setContentType("text/html");
        System.out.println("here");

            PrintWriter writer = res.getWriter();
            writer.println("HELLO WORLD");
            String h = "hello";

            writer.println("" +h);

            writer.println("welcome ");

            writer.println(req.getRemoteHost());




        String userid = getServletConfig().getInitParameter("userid");
        String password = getServletConfig().getInitParameter("password");
        writer.println(userid);     
        TestJavaMail t1 = new TestJavaMail(userid, password);

        t1.process();
        writer.println("\n bhej di ");


    }


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

    }

}
4

1 に答える 1

0

何が起こるかを確認するために、コードを自分で実行しようとしました。まず、mail.jarクラスパスで利用可能なファイルがあることを確認しました。次に、認証エラーを発生させずにコードを実行できるようにするために、必要な変更を少し加えました。つまり、代わりに:

props.put("mail.smtp.host", "smtp.exchangemails.com"); 

私が使用した:

props.put("mail.smtp.host", "smtp.gmail.com");

そして明らかに、この別のホストに自分のユーザー名とパスワードを提供する必要がありました。

あなたが正しいです; スタンドアロンで実行すると、アプリケーションはうまく機能しました。ただし、に移動すると、JBoss AS 7.0.02 つの異なる問題が発生しました。

最初に、私はこのエラーに直面しました:

at javax.mail.Session.getDefaultInstance(Session.java:320) [mail-1.4.4.jar:1.4.4]
at test.TestJavaMail.process(TestJavaMail.java:42) [classes:]

ここでいくつかのグーグル検索と解決策を見つけた後、このエラーを取り除くことができました。つまり、次の行を置き換えました。

Session session = Session.getDefaultInstance(props, auth);

と:

Session session = Session.getInstance(props, auth);

次に、アプリケーションを再度実行してみました。今回は、以下のエラーが表示されました。

java.lang.NoClassDefFoundError: javax/net/ssl/SSLPeerUnverifiedException
    com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1900)
    com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638)
    javax.mail.Service.connect(Service.java:295)
    test.TestJavaMail.process(TestJavaMail.java:63)

上記のエラーを Google で調べたところ、使用している JBoss バージョンにバグがあることがわかりました。そこで、アプリケーションを新しいJBossバージョンに移動し、JBoss AS 7.1.1成功しました。サーブレットは、指定した宛先に電子メールを正常に送信しました。

この調査が、あなたと同様の問題に苦しんでいる訪問者にとって役立つことを願っています.

于 2012-10-25T13:05:41.747 に答える