`

java发邮件

 
阅读更多
/**
 * 邮件发送
 */
/**
 * @author 
 */
public class EmailServiceImpl {
	private String sendHost = null;// 发送服务器地址
	private String receiveHost = null;// 接受服务器地址
	private String user = null;// 邮件服务器账号
	private String password = null;// 邮件服务器账号密码
	private String from = null;// 来源地址
	
	
	/**
	 * 获得配置文件内容
	 * @author 
	 */
	public  void Proper() {
		Properties prop = new Properties();
		String file = this.getClass().getResource("/emailserver.properties").getFile();
		FileInputStream in = null;
		try {
			in = new FileInputStream(file);
			prop.load(in);
			in.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		sendHost=prop.getProperty("emailserver.sendHost");
		receiveHost = prop.getProperty("emailserver.receiveHost");
		user=prop.getProperty("emailserver.user");
		password=prop.getProperty("emailserver.password");
		from=prop.getProperty("emailserver.from");
		//System.out.println(password);
		//System.out.println("==sendHost="+sendHost+"==receiveHost=="+receiveHost+"===user==="+user+"===password=="+password);
		
	}

	/**
	 * @return the sendHost
	 */
	public String getSendHost() {
		return sendHost;
	}

	/**
	 * @param sendHost
	 *            the sendHost to set
	 */
	public void setSendHost(String sendHost) {
		this.sendHost = sendHost;
	}

	/**
	 * @return the receiveHost
	 */
	public String getReceiveHost() {
		return receiveHost;
	}

	/**
	 * @param receiveHost
	 *            the receiveHost to set
	 */
	public void setReceiveHost(String receiveHost) {
		this.receiveHost = receiveHost;
	}

	/**
	 * @return the user
	 */
	public String getUser() {
		return user;
	}

	/**
	 * @param user
	 *            the user to set
	 */
	public void setUser(String user) {
		this.user = user;
	}

	/**
	 * @return the password
	 */
	public String getPassword() {
		return password;
	}

	/**
	 * @param password
	 *            the password to set
	 */
	public void setPassword(String password) {
		this.password = password;
	}

	
	/* 发送邮件时是否进行身份验证 */
	private boolean authFlag = true;

	/* 发送邮件是否需要代理 */
	private boolean proxyFlag = false;
	/* 其他设置 */
	private boolean restFlag = false;
	
	/**
	 * 设置邮件发信人、收信人、抄送、密送、邮件标题、邮件内容、附件的文件名称(包括路径) 同时生成Session、Message,并且调用发送邮件
	 */
	public synchronized int sendEmailNow(String to,String cc,String subject, String body, String attchFile)

	{
		//System.out.println("hello");
		Proper();
		int successFlag = 0;
		int m_result;
		try {
			Properties props = System.getProperties(); // Properties用来将props传给MAIL
														
			Session session = null; // 创建Session对象

			props.put("mail.smtp.host", sendHost);
			if (authFlag) {
				props.put("mail.smtp.auth", "true");
			} else {
				props.put("mail.smtp.auth", "");
			}
			session = Session.getInstance(props, null);

			if (restFlag) {
				session.setDebug(true);
			}
			/** 创建邮件MESSAGE */
			Message mesg = new MimeMessage(session);
			InternetAddress[] addresses;

			/** from 地址列表 */
			if (!from.equals("")) {
				
				mesg.setFrom(new InternetAddress(from));
			} else {
				
					System.out.println("请填写发信人地址");
					return -2;
				
			}
			
			/** TO地址列表 */
			if (!to.equals("")) {
				addresses = InternetAddress.parse(to);
				mesg.setRecipients(javax.mail.Message.RecipientType.TO,
						addresses);
			//	mesg.setr
				//mesg.setr
			} else {
				System.out.println("请填写收信人地址");
				return -3;
			}
			/** CC地址列表 抄送*/
			if (cc!=null&&!cc.equals("")) {
				//wlog.userLog(cc);
				addresses = InternetAddress.parse(cc);
				
				mesg.setRecipients(javax.mail.Message.RecipientType.CC,
						addresses);
			}
			/** 设置邮件主题topic */
			if (!subject.equals("")) {
				mesg.setSubject(subject);
			} else {
				mesg.setSubject(subject);
				System.out.println("请填写邮件主题");
			}

			/** 设置邮件内容 */
			if (attchFile==null || attchFile.equals("")) {
				mesg.setContent(body, "text/html;charset=GBK");
				//mesg.setText(body);
			} else {
				Multipart mp = new MimeMultipart();
				MimeBodyPart mbp = new MimeBodyPart();

				mbp.setContent(body, "text/html;charset=GBK");
				mp.addBodyPart(mbp);
				/** 添加附件 */
				ArrayList attachlist = tokenize(attchFile);
				for (int i = 0; i < attachlist.size(); i++) {
					MimeBodyPart attachMbp = new MimeBodyPart();
					FileDataSource fds = new FileDataSource(
							(String) (attachlist.get(i)));
					attachMbp.setDataHandler(new DataHandler(fds));
					attachMbp.setFileName(MimeUtility.encodeText(fds.getName(),
							"GBK", "B"));
					attachMbp.setHeader("Content-Type", fds.getContentType());
					mp.addBodyPart(attachMbp);
				}
				mesg.setContent(mp);
			}
			/** 设置邮件发送时间 */
			mesg.setSentDate(new Date());
			/** 发送邮件 */
			if (authFlag) {
				Transport tr = session.getTransport("smtp");
				tr.connect(sendHost, user, password);
				mesg.saveChanges();
				tr.sendMessage(mesg, mesg.getAllRecipients());
				tr.close();
			} else {
				Transport.send(mesg);
			}
		}catch (MessagingException e) {/* send发送邮件的异常处理 */
			System.out.println("邮件发送失败!");
			successFlag=-9;
			e.printStackTrace();
		} catch (Exception e) {
			successFlag=-9;
			e.printStackTrace();
		}
		return successFlag;
	}
	
	private ArrayList tokenize(String s) {
		ArrayList arrayl = new ArrayList();
		for (StringTokenizer stringtok = new StringTokenizer(s, ","); stringtok
				.hasMoreTokens(); arrayl.add(stringtok.nextToken().trim()))
			;
		return arrayl;
	}
	String sendProtocol = "smtp";
	String receiveProtocol = "pop3";


	/**
	 * 覆盖方法 
	 */
	public boolean sendEmail(String to,String cc, String subject, String body,
			String attchFile) {
		int successflag=sendEmailNow(to,cc,subject,body,attchFile);
		if(successflag==0){
			return true;
		}else{
			return false;
		}
	}

}


配置文件:
emailserver.properties:
emailserver.sendHost=//邮箱服务器,比如163的:smtp.163.com
emailserver.receiveHost=//不填
emailserver.user=//发送邮件的用户名,该邮箱必须是emailserver.sendHost的邮箱
emailserver.password=//发送邮件的密码
emailserver.from=//同emailserver.user
发邮件需要的jar包:
 activation.jar,mail.jar

可能出现的异常:

Exception in thread "main" java.lang.NoClassDefFoundError:

com/sun/mail/util/LineInputStreams

 

原因是jar包版本不统一,解决方法如下:

删除Java EE 5 Libraries/javaee.jar/mail里的包有东西.

具体方法如下:

在Myeclipse6.0.1中用rar打开X:/Program Files/MyEclipse 6.0/

myeclipse/eclipse/plugins/

com.genuitec.eclipse.j2eedt.core_6.0.1.zmyeclipse601200710/

data/libraryset/EE_5/

javaee.jar

在Myeclipse8.5中 D:/Program Files/MyEclipse 8.5/

Common/plugins/

com.genuitec.eclipse.j2eedt.core_8.5.0.me201003231033/

data/libraryset/EE_5/EE_5/javaee.jar ,然后删除mail,一切就ok了.

若删除的时候出错,则需要先在myeclipse里面删除掉引用了J2ee5.0的工程,

然后再关闭myeclipse再进行删除操作。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics