0

我如何保持 Java 邮件传输对象处于活动状态或连接状态。

我已经在我的代码中将它写在 Web 应用程序内的一个简单类文件中:-

@Resource(name = "myMailServer")
    private Session mailSession;

    Transport transport ;

public boolean sendMail(String recipient, String subject, String text) {
    boolean exe = false;

    Properties p = new Properties();

    String username = "someone@gmail.com";
    String password = "password";

    InitialContext c = null;

    try
    {
         c = new InitialContext();
          mailSession = (javax.mail.Session) c.lookup("java:comp/env/myMailServer");
    }
    catch(NamingException ne)
    {
        ne.printStackTrace();
    }

    try
    {
        Message msg = new MimeMessage(mailSession);
        msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(recipient, false));
        msg.setSubject(subject);
        msg.setText(text);
        msg.setHeader("MIME-Version" , "1.0" );
        msg.setHeader("Content-Type" , "text/html" );
        msg.setHeader("X-Mailer", "Recommend-It Mailer V2.03c02");
        msg.saveChanges();

        //Transport.send(msg);
        if(transport == null) {
            transport = mailSession.getTransport("smtps");
            System.out.println("" + transport.isConnected());
            if(!transport.isConnected()) {
                transport.connect(username, password);
            }
        }

        transport.sendMessage(msg, msg.getAllRecipients());
        exe = true;
    }
    catch (AddressException e)
    {
        e.printStackTrace();
        exe = false;
    }
    catch (MessagingException e)
    {
        e.printStackTrace();
        exe = false;
    }
    finally {
        /*try {
            if(transport != null)
                transport.close();
        }
        catch(MessagingException me) {
            me.printStackTrace();
        }
        catch(Exception e) {
            e.printStackTrace();
        }*/
    }

    return exe;
}

完整的代码现在
每次我运行这段代码都需要一些时间来连接邮件服务器
和线路

System.out.println("" + transport.isConnected());

打印一个错误的

我如何保留对象传输,因为它确实为空并进入块

if(transport == null) {

或传输对象保持连接...

谢谢普拉杜特
_

4

1 回答 1

0

代码应该是....
传输对象的静态初始化
没有任何问题
,但可以很好地使用函数 静态传输 getTransport()方法

@Resource(name = "myMailServer")
    private Session mailSession;

    static Transport transport ;

    public boolean sendMail(String recipient, String subject, String text) {
    boolean exe = false;

    Properties p = new Properties();

    String username = "someone@gmail.com";
    String password = "password";

    InitialContext c = null;

    try
    {
         c = new InitialContext();
          mailSession = (javax.mail.Session) c.lookup("java:comp/env/myMailServer");
    }
    catch(NamingException ne)
    {
        ne.printStackTrace();
    }

    try
    {
        Message msg = new MimeMessage(mailSession);
        msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(recipient, false));
        msg.setSubject(subject);
        msg.setText(text);
        msg.setHeader("MIME-Version" , "1.0" );
        msg.setHeader("Content-Type" , "text/html" );
        msg.setHeader("X-Mailer", "Recommend-It Mailer V2.03c02");
        msg.saveChanges();

        //Transport.send(msg);
        if(transport == null) {

            transport = mailSession.getTransport("smtps");


        }
        if(!transport.isConnected()) {

                transport.connect(username, password);
            }

        transport.sendMessage(msg, msg.getAllRecipients());
        exe = true;
    }
    catch (AddressException e)
    {
        e.printStackTrace();
        exe = false;
    }
    catch (MessagingException e)
    {
        e.printStackTrace();
        exe = false;
    }
    finally {
        /*try {
            if(transport != null)
                transport.close();
        }
        catch(MessagingException me) {
            me.printStackTrace();
        }
        catch(Exception e) {
            e.printStackTrace();
        }*/
    }

    return exe;
}

谢谢
问候
Pradyut

于 2010-03-02T10:53:52.807 回答