`
tou3921
  • 浏览: 68615 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

javaMail 群发探讨

阅读更多
最近才接触到邮件群发,用于包揽公司的海量客户。
现在遇到了几个问题:
1:邮件地址无效,并非格式无效,会导致错误之后的其他地址发送不成功。
2:smtp服务器有限制。

第一个经过努力已经基本解决,可以捕获一个SendFailedException 异常,从异常类中获取然:e.getValidUnsentAddresses(),之后递归一下。

第二个问题是存在的,并且我反复检查程序也没发现什么问题,每次密抄15个,20秒执行一次,根据服务提供的信息,应该不会受到smtp服务器限制。可还是发上14左右后就抛异常了。

javax.mail.MessagingException: 451 Out of recipients limit for this sender  .......

有时抛socket 异常。

有经验的分享下,一起探讨探讨。
分享到:
评论
8 楼 mysoko 2008-12-02  
貌似不需要这样吧,我用递归发送,知道我集合里面所有数据发送完
我用gmail发送有限制每天100个。
你这个每天可以发9w??么得限制??
7 楼 tou3921 2008-09-07  
xiao0556 写道
我也遇到过楼主的同楼的问题,现在自己建邮件服务用来群发。虽然可以发了 但是基本上所有的邮箱都把我发的邮件过滤了 要不就是当垃圾邮件。不知道应该怎么弄了

像163什么都服务器肯定是要验证你的服务器的,所以会不过,没办法,我现在只能这样弄了,还凑合。
6 楼 xiao0556 2008-09-06  
我也遇到过楼主的同楼的问题,现在自己建邮件服务用来群发。虽然可以发了 但是基本上所有的邮箱都把我发的邮件过滤了 要不就是当垃圾邮件。不知道应该怎么弄了
5 楼 snarkzen 2008-09-05  
呵呵,我写邮件的时候也常出问题,你比我好多了
4 楼 tou3921 2008-09-04  
对于自己搭建服务器,还是没有时间、精力。经验、
ok,就这样吧,实在想不到什么好办法。
最后只能用2个用户循环发,捕获到 MessagingException 和socketException时
停上3分钟。现在基本90%以上可以成功。
效率确实令人汗颜,24小时最多也就90000封,
不过垃圾制造的够多的
3 楼 aaronjiu_00 2008-09-03  
使用TaskExecutor试试,每个线程只发一封邮件,然后放在异步线程池中,每20秒钟执行Task一次
public class SendMail implements Runnable {
     public SendMail() {
     }

     public void run() {
         // 发送一封邮件
     }
}

public class Task {
    private TaskExecutor executor;// 任务执行器

    public void execute() {
         executor.execute(new SendMai());
    }
}
2 楼 tou3921 2008-09-03  
应该不会,我是发完15条之后停20秒,总会有20秒空闲的吧。
代码发上来看看有啥问题没:
................
public static boolean sendMail(String subject,String body,String to,String content,Address[] ValidUnsentAddresses,boolean isReSend) {
		logger.info("***开始发送邮件***");
		boolean result=false;
		try {
			Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

			// Get a Properties object
			Properties props = System.getProperties();
			props.setProperty("mail.smtp.host", STMT_SERVER);// --设置SMTP服务器地坄1�7
			props.setProperty("mail.transport.protocol", "smtp");// --设置使用smtp协议
			// props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
			props.setProperty("mail.smtp.socketFactory.fallback", "false");
			props.setProperty("mail.smtp.port", PORT);// --设置SMTP端口叄1�7
			props.setProperty("mail.smtp.socketFactory.port", PORT);
			props.put("mail.smtp.auth", "true");// --SMTP服务用户认证
			
			final String username = USERNAME;
			final String password = PASSWORD;
			// --认证
			Session session = Session.getDefaultInstance(props,
					new Authenticator() {
						protected PasswordAuthentication getPasswordAuthentication() {
							return new PasswordAuthentication(username,
									password);
						}
					});
			// --是否以调试模式运衄1�7
			session.setDebug(true);
			Transport transport = session.getTransport("smtp");
			Message msg = new MimeMessage(session);
			// -- 创建丄1�7个新信息 --
			if(ValidUnsentAddresses==null){
				List list=new ArrayList();;
				
				String[] gods=to.split(",");
				for (int i = 0; i < gods.length; i++) {
					try {
						if(gods[i]!=null && !"".equals(gods[i])&&SendMailManager.checkEmail(gods[i])){
							list.add(new InternetAddress(gods[i]));
						}					
					} catch (AddressException e) {
						logger.error(SendMailManager.class.getName()+"  :"+e.getMessage());			
						e.printStackTrace();
					}
				}
				// ----------
				InternetAddress[] address = (InternetAddress[])list.toArray(new InternetAddress[list.size()]);
				msg.setRecipients(Message.RecipientType.BCC, address);
			}else{
				msg.setRecipients(Message.RecipientType.BCC, ValidUnsentAddresses);
			}
			
			// --发�1�7�人
			msg.setFrom(new InternetAddress(USER_EMAIL));
			// --标题
			msg.setSubject(subject);
			// --发�1�7�时闄1�7
			msg.setSentDate(new Date());
			
			
			if(body!=null&&!"".equals(body)){
				MimeMultipart mp = new MimeMultipart();
				MimeBodyPart bp = new MimeBodyPart();
				bp.setContent(body, "text/html;charset=utf-8");
				mp.addBodyPart(bp);
				msg.setContent(mp);
			}else if(!"".equals(content)){
				msg.setText(content);
		         }
                            msg.saveChanges();
			transport.connect((String) props.get("mail.smtp.host"),USER_EMAIL, password);
			transport.sendMessage(msg, msg.getRecipients(Message.RecipientType.BCC));
			transport.close();
			result=true;
			System.out.println("邮件已发送成功!");
			
		} catch (SendFailedException e) {
			try {
				Thread.currentThread().sleep(10000);
			} catch (InterruptedException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			if(e.getValidUnsentAddresses()!=null && isReSend){
				
				sendMail(subject,body,"",content,e.getValidUnsentAddresses(),false);

			}
			
		}catch (MessagingException e) {
			result=false;
			System.out.println("邮件已发失败!");
			logger.error(SendMailManager.class.getName()+"  :"+e.getMessage());
			e.printStackTrace();
		}finally{
			//System.out.println(new Date().toLocaleString()+"连接smtp一次");
		}
		return result;
	}



外部调用的是这个
sendMail(subject,body,to,content,null,true);

完成后当前线程sleep20秒
to=“地址1,地址2"
1 楼 魔力猫咪 2008-09-03  
自己搭建一个Email服务器吧。现在服务商提供的Email服务器限制很多。我估计是你虽然20秒发一次,一次15个。但是有可能20秒无法执行完发送15个的任务。累计下来,就超了。

相关推荐

    javamail邮件群发、单发_邮件发送

    在这个主题中,我们将深入探讨如何使用 JavaMail 实现邮件的群发和单发,以及如何发送文本和 HTML 格式的邮件。 首先,我们需要导入 JavaMail 相关的库,这通常通过 Maven 或 Gradle 进行依赖管理。核心依赖包括 `...

    javamail实现群发邮件

    在本文中,我们将深入探讨如何使用 JavaMail 实现群发邮件的功能。 首先,要使用 JavaMail 发送邮件,我们需要添加其依赖到项目中。如果你使用的是 Maven,可以在 `pom.xml` 文件中添加以下依赖: ```xml ...

    Java实现发送邮件

    本文将深入探讨如何使用Java实现邮件发送功能,包括必要的库、步骤和关键代码片段。 首先,要实现Java邮件发送,我们需要引入JavaMail API。这是一个开源的Java库,提供了发送和接收邮件的标准API。你可以通过Maven...

    javaMail实现单发/群发邮件操作

    在这个项目中,我们将会探讨如何使用 JavaMail 实现单发和群发邮件的操作。 首先,为了使用 JavaMail 发送邮件,我们需要引入相关的依赖。在 Maven 项目中,可以在 `pom.xml` 文件中添加以下依赖: ```xml ...

    简单javamail的实现(HelloWorld)

    下面我们将深入探讨如何实现一个简单的JavaMail应用。 首先,我们需要添加JavaMail相关的依赖库到项目中。这通常通过Maven或Gradle等构建工具完成。例如,在Maven的`pom.xml`文件中,我们会添加如下依赖: ```xml ...

    自己写的一个基于Javamail的邮件发送客户端

    下面我们将详细探讨 JavaMail 的核心概念以及如何实现邮件发送客户端。 1. **JavaMail API**: JavaMail 提供了一组接口和类,用于处理邮件服务器的通信。它支持 SMTP(简单邮件传输协议)用于发送邮件,POP3(邮局...

    java实现邮件群发

    通过理解 JavaMail API 的工作原理,并结合适当的库,可以构建出高效且可靠的邮件群发系统。在实际开发过程中,还应注意避免触发邮件服务商的反垃圾邮件策略,以确保邮件能够成功发送到目标用户。

    JavaMail案例 Myeclipse 实例

    在这个实例中,我们将探讨如何在 MyEclipse 中使用 JavaMail 发送电子邮件。 首先,我们需要在项目中引入 JavaMail 相关的依赖库。JavaMail 主要由 javax.mail 和 javax.mail.internet 两个包组成,通常通过 Maven ...

    邮件群发代码

    本文将深入探讨如何使用JavaMail API实现邮件群发功能,并以163邮箱为例进行说明。 首先,要理解JavaMail API的基础知识。JavaMail API是Java平台上的一个标准接口,它允许程序通过SMTP(简单邮件传输协议)和其他...

    java 邮件群发

    本篇将深入探讨如何利用JavaMail进行邮件群发,并结合源码分析工具进行理解和实践。 首先,JavaMail API提供了javax.mail和javax.mail.internet两个主要包,其中包含了处理邮件所需的所有类和接口。要发送邮件,...

    邮件群发系统

    接下来,我们将深入探讨这些技术及其在邮件群发中的应用。 首先,JSP(JavaServer Pages)是Java平台上的动态网页技术,它允许开发者将静态内容与动态数据结合在一起。在邮件群发系统中,JSP页面通常用于用户界面...

    发送普通文本格式的E-mail群发的java web源码

    下面我们将深入探讨相关知识点。 1. JavaMail API: JavaMail API是Java平台上的标准API,用于创建、发送和处理电子邮件。它提供了丰富的类和接口,如`javax.mail.Session`,`javax.mail.Transport`,`javax.mail....

    在WEB网站下群发邮件的例子

    在这个例子中,我们将探讨如何在Java环境下,利用Tomcat服务器来实现这一功能。这个过程涉及到的主要知识点包括JavaMail API的使用、定时任务的设定以及Web应用的部署。 首先,JavaMail API是Java中用于发送邮件的...

    java email包(activation.jar,mail.jar)

    在实际开发中,JavaMail API不仅可以用于简单的文本邮件,还可以处理复杂的HTML邮件、带有附件的邮件,甚至可以实现邮件模板、邮件群发等功能。同时,它支持SSL/TLS加密,保证了邮件传输的安全性。 总的来说,Java ...

    java邮件服务器的实现(完整代码)

    在这个项目中,我们将探讨如何使用Java来构建一个邮件服务器,并提供完整的代码示例。以下是关于这个主题的详细知识点: 1. **SMTP协议**:SMTP是用于发送邮件的标准协议。Java中的`javax.mail`和`javax.mail.api`...

    用java代码发邮件,真是牛啊,可群发,也可发附件

    在本文中,我们将深入探讨如何使用Java代码实现邮件发送,包括群发和添加附件的功能。 首先,要实现这个功能,我们需要引入JavaMail API,这是一个开源库,提供了处理电子邮件所需的所有接口和类。在Eclipse开发...

    java实现发送邮件

    在这个主题中,我们将详细探讨如何使用 JavaMail API 实现邮件的发送,包括群发和单显功能。 首先,要使用 JavaMail API,我们需要引入相关的库。在 Maven 项目中,可以在 `pom.xml` 文件中添加以下依赖: ```xml ...

    j简单邮件发送示例(java源代码)

    我们将探讨以下几个关键知识点: 1. **JavaMail API**: JavaMail API是Java中用于发送和接收电子邮件的标准库。它提供了丰富的接口和类,可以处理SMTP(简单邮件传输协议)、POP3(邮局协议版本3)和IMAP(因特网...

    计算机网络编程

    下面我们将详细探讨相关知识点。 首先,网络邮件群发涉及到的主要技术包括SMTP(Simple Mail Transfer Protocol)协议,这是互联网上传输电子邮件的标准协议。SMTP允许用户通过服务器向其他用户发送邮件。在编程...

Global site tag (gtag.js) - Google Analytics