java实现163邮箱发送邮件到qq邮箱成功案例
下载和上传附件、发送短信和发送邮件,都算是程序中很常用的功能,之前记录了文件的上传和下载还有发送短信,由于最近比较忙,邮件发送的功能就没有时间去弄,现在终于成功以163邮箱发送邮件到qq邮箱,以下是相关代码,具体解释可以参考代码中注释:
packagetest; importjava.util.ArrayList; importjava.util.Date; importjava.util.List; importjava.util.Properties; importjava.util.regex.Matcher; importjava.util.regex.Pattern; importjavax.mail.Address; importjavax.mail.Authenticator; importjavax.mail.BodyPart; importjavax.mail.Message; importjavax.mail.PasswordAuthentication; importjavax.mail.Session; importjavax.mail.Transport; importjavax.mail.internet.InternetAddress; importjavax.mail.internet.MimeBodyPart; importjavax.mail.internet.MimeMessage; importjavax.mail.internet.MimeMultipart; importcom.sun.mail.util.MailSSLSocketFactory; ///** //* //*@authortuzongxun123 //*@Description邮件发送测试类 //*/ publicclasssendMailTest{ publicstaticvoidmain(String[]args)throwsException{ //配置信息 Propertiespro=newProperties(); pro.put("mail.smtp.host","smtp.163.com"); pro.put("mail.smtp.auth","true"); //SSL加密 MailSSLSocketFactorysf=null; sf=newMailSSLSocketFactory(); //设置信任所有的主机 sf.setTrustAllHosts(true); pro.put("mail.smtp.ssl.enable","true"); pro.put("mail.smtp.ssl.socketFactory",sf); //根据邮件的会话属性构造一个发送邮件的Session,这里需要注意的是用户名那里不能加后缀,否则便不是用户名了 //还需要注意的是,这里的密码不是正常使用邮箱的登陆密码,而是客户端生成的另一个专门的授权码 MailAuthenticatorauthenticator=newMailAuthenticator("tuzongxun123", "客户端授权码"); Sessionsession=Session.getInstance(pro,authenticator); //根据Session构建邮件信息 Messagemessage=newMimeMessage(session); //创建邮件发送者地址 Addressfrom=newInternetAddress("tuzongxun123@163.com"); //设置邮件消息的发送者 message.setFrom(from); //验证收件人邮箱地址 List<String>toAddressList=newArrayList<>(); toAddressList.add("1160569243@qq.com"); StringBufferbuffer=newStringBuffer(); if(!toAddressList.isEmpty()){ StringregEx="^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$"; Patternp=Pattern.compile(regEx); for(inti=0;i<toAddressList.size();i++){ Matchermatch=p.matcher(toAddressList.get(i)); if(match.matches()){ buffer.append(toAddressList.get(i)); if(i<toAddressList.size()-1){ buffer.append(","); } } } } StringtoAddress=buffer.toString(); if(!toAddress.isEmpty()){ //创建邮件的接收者地址 Address[]to=InternetAddress.parse(toAddress); //设置邮件接收人地址 message.setRecipients(Message.RecipientType.TO,to); //邮件主题 //message.setSubject("java邮件测试"); message.setSubject("为什么错了"); //邮件容器 MimeMultipartmimeMultiPart=newMimeMultipart(); //设置HTML BodyPartbodyPart=newMimeBodyPart(); //邮件内容 //StringhtmlText="java邮件测试111"; StringhtmlText="为什么错了"; bodyPart.setContent(htmlText,"text/html;charset=utf-8"); mimeMultiPart.addBodyPart(bodyPart); //添加附件 List<String>fileAddressList=newArrayList<String>(); fileAddressList .add("C:\\Users\\tuzongxun123\\Desktop\\新建MicrosoftOfficeWord文档.docx"); if(fileAddressList!=null){ BodyPartattchPart=null; for(inti=0;i<fileAddressList.size();i++){ if(!fileAddressList.get(i).isEmpty()){ attchPart=newMimeBodyPart(); //附件数据源 DataSourcesource=newFileDataSource( fileAddressList.get(i)); //将附件数据源添加到邮件体 attchPart.setDataHandler(newDataHandler(source)); //设置附件名称为原文件名 attchPart.setFileName(MimeUtility.encodeText(source .getName())); mimeMultiPart.addBodyPart(attchPart); } } } message.setContent(mimeMultiPart); message.setSentDate(newDate()); //保存邮件 message.saveChanges(); //发送邮件 Transport.send(message); } } } classMailAuthenticatorextendsAuthenticator{ /** *用户名 */ privateStringusername; /** *密码 */ privateStringpassword; /** *创建一个新的实例MailAuthenticator. * *@paramusername *@parampassword */ publicMailAuthenticator(Stringusername,Stringpassword){ this.username=username; this.password=password; } publicStringgetPassword(){ returnpassword; } @Override protectedPasswordAuthenticationgetPasswordAuthentication(){ returnnewPasswordAuthentication(username,password); } publicStringgetUsername(){ returnusername; } publicvoidsetPassword(Stringpassword){ this.password=password; } publicvoidsetUsername(Stringusername){ this.username=username; } }
注:我有个同事使用我这个代码更换为他的账号和客户端授权码后,一运行就报错,然后重置了一下邮箱的客户端授权码后,错误便消失了。
以上就是本文的全部内容,希望对大家学习java程序设计有所帮助。