我希望能够将端口设置为我想要的端口以及主机,而不是端口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被设置。我尝试使用空白用户名和密码无济于事。有任何想法吗?我在做一些蠢事吗?
答案 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");