2

myeclipse 7を使用していますが、必要なjava EE 5ライブラリを追加しました。mail.jarをアプリケーションの外部に追加すると、javaEE5ライブラリからjavaee.jarが呼び出されます。mail.jarは使用されていません。 java EE 5ライブラリを削除すると機能しますが、javaEE5ライブラリが必要です。java EE 5ライブラリのjavaee.jarを使用してメールを送信するにはどうすればよいですか?

以下が必要な場合は、sedメールのhavaコードです

 String  d_email = "email@gmail.com",
                d_password = "pass",
                d_host = "smtp.gmail.com",
                d_port  = "465",
                m_to = "email@gmail.com",
                m_subject = "Testing",
                m_text = "This is the testing email.";

        public Main()
        {
            Properties props = new Properties();
            props.put("mail.smtp.user", d_email);
            props.put("mail.smtp.host", d_host);
            props.put("mail.smtp.port", d_port);
            props.put("mail.smtp.starttls.enable","true");
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.debug", "true");
            props.put("mail.smtp.socketFactory.port", d_port);
            props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            props.put("mail.smtp.socketFactory.fallback", "false");

            SecurityManager security = System.getSecurityManager();

            try
            {
                Authenticator auth = new SMTPAuthenticator();
                Session session = Session.getInstance(props, auth);
                session.setDebug(true);

                MimeMessage msg = new MimeMessage(session);
                msg.setText(m_text);
                msg.setSubject(m_subject);
                msg.setFrom(new InternetAddress(d_email));
                msg.addRecipient(Message.RecipientType.TO, new InternetAddress(m_to));
                Transport.send(msg);

                System.out.println("Mail Sent");
            }
            catch (Exception mex)
            {
                mex.printStackTrace();
            } 
        }

    public static void main(String[] args)
    {
        Main blah = new Main();
    }

    private class SMTPAuthenticator extends javax.mail.Authenticator
    {
        public PasswordAuthentication getPasswordAuthentication()
        {
            return new PasswordAuthentication(d_email, d_password);
        }
    }

エラー :

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
    at javax.mail.Session.loadProvidersFromStream(Session.java:928)
    at javax.mail.Session.access$000(Session.java:174)
    at javax.mail.Session$1.load(Session.java:870)
    at javax.mail.Session.loadResource(Session.java:1084)
    at javax.mail.Session.loadProviders(Session.java:889)
    at javax.mail.Session.<init>(Session.java:210)
    at javax.mail.Session.getInstance(Session.java:232)
    at com.ctn.origin.connection.Main.<init>(Main.java:35)
    at com.ctn.origin.connection.Main.main(Main.java:55)
4

1 に答える 1

1

プロジェクトのように、コンテナ固有のライブラリを手動で追加しないでください。javaee.jar異なるメーカー/バージョンのコンテナでプロジェクトをデプロイして実行した場合にのみ、実行時の問題が発生します。これjavaee.jarはGlassfishに固有のものです。Glassfish自体にはすでにが付属しているため、mail.jarこれは、ターゲットランタイムがGlassfishではないことを示しています。おそらくTomcatかJBossか何かでしょう。

プロジェクトのコンパイルエラーを克服するためにこれを行った場合は、これを別の方法で解決する必要があります。私はMyEclipseを実行しませんが、これはEclipseに非常に似ていると思います。したがって、このEclipseベースの回答はMyEclipseでも機能するはずです。プロジェクトを右クリックし、 [プロパティ]を選択し、[ターゲットランタイム]セクションに移動して、ターゲットランタイム(servletcontainer)を選択します。リストから使用したい)。このようにして、Eclipseはそのライブラリをプロジェクトのビルドパスに正しい方法で自動的に含めます。

参照:

于 2011-06-01T17:44:02.990 に答える