传输中没有身份验证用户名和密码的Java Mail Change端口

时间:2014-11-11 22:14:39

标签: java email smtp

我希望能够将端口设置为我想要的端口以及主机,而不是端口25。但我不想设置用户名或密码,因为凭据会有所不同。我的代码库工作正常,只需使用静态方法Transport.send()来执行发送电子邮件的任务。 Transport具有不带参数的connect方法或方法host / port / auth凭证。 似乎没有办法只设置端口和主机而不使用其他两个。 无论我尝试什么,运输似乎默认为25。我正在使用一个名为smtp4dev的工具来监听我正在测试的端口。 代码的重要部分如下:

    Properties props = new java.util.Properties();
    props.setProperty("mail.transport.protocol", "smtp");
    props.setProperty("mail.smtp.host", "localhost");//Just using localhost for testing
    props.put("mail.smtp.port", 3500);//Whatever port
    props.setProperty("mail.smtp.auth", "false");
    session = Session.getInstance(props);
    msg = new MimeMessage(session);

    Transport transport = session.getTransport("smtp");
    transport.connect(); //transport.connect("localhost", 3500, "","");
    transport.sendMessage(msg, msg.getRecipients(Message.RecipientType.TO));
    transport.close();

我可以检查会话并看到它设置了端口属性,但是当我检查传输时,我只看到defaultPort被设置。我尝试使用空白用户名和密码无济于事。有任何想法吗?我在做一些蠢事吗?

2 个答案:

答案 0 :(得分:0)

这就是解决它的问题,只需使用SMTPTransport就行了。我还使用port作为字符串而不是int。(然后我必须取消阻塞端口)

import com.sun.mail.smtp.SMTPTransport;

Properties props = new java.util.Properties();
    props.setProperty("mail.transport.protocol", "smtp");
    props.setProperty("mail.smtp.host", "localhost");//Just using localhost for testing
    props.setProperty(SMTP_PORT_PROPERTY, String.valueOf(3500));//Whatever port
    props.setProperty("mail.smtp.auth", "false");
    session = Session.getInstance(props);
    msg = new MimeMessage(session);

    SMTPTransport transport = (SMTPTransport) session.getTransport("smtp");
    transport.connect(); //transport.connect("localhost", 3500, "","");
    transport.sendMessage(msg, msg.getRecipients(Message.RecipientType.TO));
    transport.close();

答案 1 :(得分:-1)

属性值“ mail.smtp.port”的数据类型必须为字符串。

尝试更改此内容:

props.put ("mail.smtp.port", 3500);

收件人:

props.put ("mail.smtp.port", "3500");