javamail 超时_如何正确设置JavaMail超时设置

I am using JavaMail to connect to a POP3 server.

Further, I set the following properties, so that JavaMail won't wait to long if an email server doesn't respond:

props.setProperty("mail.pop3.connectionpooltimeout", "3000");

props.setProperty("mail.pop3.connectiontimeout", "3000");

props.setProperty("mail.pop3.timeout", "3000");

However, in some cases the timeout works properly but sometimes JavaMail freezes for minutes(!) with the following debug message:

DEBUG POP3: connecting to host "pop3.yahoo.com", port 110, isSSL false

Changing ports or protocols (SSL, TLS..) has no effect. I assume that the host simply doesn't exist.

For example, if I poll pop3.yahoo.com instead of pop.mail.yahoo.com (which would be the right host name), I have to wait very long til a timeout exception occurs.

After several minutes, I get the following exception and the application continues to run:

java.net.ConnectException: Operation timed out

pop3.yahoo.com seems to exist but won't respond:

localhost:~ me$ ping pop3.yahoo.com

PING pop3.yahoo.com (206.190.46.10): 56 data bytes

Request timeout for icmp_seq 0

Request timeout for icmp_seq 1

Request timeout for icmp_seq 2

Request timeout for icmp_seq 3

^C

You might be asking why I use pop3.yahoo.com instead of pop.mail.yahoo.com.

Well, I simply wanted to test what happens if the user of my application inserts a wrong host name.

I believe that this issue is related to this report http://www.opensubscriber.com/message/javamail-interest@java.sun.com/180946.html where the poster claims that the problem occurs if the email server closes the connection. JavaMail then seems to wait very long (don't know why).

Since the issue wasn't resolved in the link I posted: Does somebody know how to fix or at least debug this?

Any help would be really appreciated!

解决方案

I found the reason for the problem. It was a bug in my code. Javamail respects the timeout setting fine.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设置JavaMail发送邮件,你需要按照以下步骤进行操作: 1. 导入相关的类库:首先,确保你的项目中已经导入了JavaMail和Java Activation Framework(JAF)的相关类库。你可以从官方网站(https://javaee.github.io/javamail/)下载并添加这些类库到你的项目中。 2. 配置SMTP服务器信息:你需要指定SMTP服务器的地址和端口号。通常,SMTP服务器的地址是根据你使用的邮件服务提供商而不同。例如,对于Gmail来说,SMTP服务器地址是"smtp.gmail.com",端口号是587。 3. 创建Session对象:使用javax.mail.Session类创建一个Session对象。你可以通过使用Properties对象来设置Session的一些属性,例如SMTP服务器信息、是否需要身份验证等。 ```java Properties properties = new Properties(); properties.put("mail.smtp.host", "smtp.gmail.com"); properties.put("mail.smtp.port", "587"); properties.put("mail.smtp.auth", "true"); Session session = Session.getDefaultInstance(properties, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("your-email@gmail.com", "your-password"); } }); ``` 在这里,你需要替换`your-email@gmail.com`和`your-password`为你自己的邮箱地址和密码。 4. 创建Message对象:使用javax.mail.Message类创建一个Message对象,并设置邮件的发送者、接收者、主题和正文等信息。 ```java Message message = new MimeMessage(session); message.setFrom(new InternetAddress("your-email@gmail.com")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient-email@example.com")); message.setSubject("Hello, World!"); message.setText("This is the content of the email."); ``` 在这里,你需要将`your-email@gmail.com`替换为你自己的邮箱地址,将`recipient-email@example.com`替换为邮件接收者的邮箱地址。 5. 发送邮件:使用Transport类的静态方法send()发送邮件。 ```java Transport.send(message); ``` 完整的示例代码如下: ```java import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.util.Properties; public class EmailSender { public static void main(String[] args) { Properties properties = new Properties(); properties.put("mail.smtp.host", "smtp.gmail.com"); properties.put("mail.smtp.port", "587"); properties.put("mail.smtp.auth", "true"); Session session = Session.getDefaultInstance(properties, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("your-email@gmail.com", "your-password"); } }); try { Message message = new MimeMessage(session); message.setFrom(new InternetAddress("your-email@gmail.com")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient-email@example.com")); message.setSubject("Hello, World!"); message.setText("This is the content of the email.");

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值