1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 使用java代码实现exchange类型的邮箱进行发送邮件

使用java代码实现exchange类型的邮箱进行发送邮件

时间:2019-03-10 17:00:11

相关推荐

使用java代码实现exchange类型的邮箱进行发送邮件

一:

我是普通java项目(没有框架没有Maven),需要的jar包(可以去/下载jar包):

javax.mail-1.6.2.jar

activation-1.1.1.jar

二:

Demo:

import java.nio.file.Files;import java.nio.file.Paths;import java.util.Properties;import javax.activation.DataHandler;import javax.mail.Authenticator;import javax.mail.BodyPart;import javax.mail.Multipart;import javax.mail.PasswordAuthentication;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMessage.RecipientType;import javax.mail.internet.MimeMultipart;import javax.mail.util.ByteArrayDataSource;public class Export {// 发件人邮箱账号和密码private static String userName = "xxx";private static String password = "xxx";// 收件人邮箱账号private static String userName2 = "xxx";// 抄送人邮箱账号private static String userName3 = "xxx";public static void main(String[] args) {try {// 1.创建SessionSession session = Export.createsession();// 2.创建邮件对象(Message抽象类的子类对象)MimeMessage msg = new MimeMessage(session); // 传入sessionmsg.setFrom(new InternetAddress(userName)); // 发件人msg.setRecipient(RecipientType.TO, new InternetAddress(userName2)); // 收件人msg.setRecipient(, new InternetAddress(userName3)); // 抄送人msg.setSubject("每日汇报", "utf-8"); // 标题// 3.邮件内容"复合"对象Multipart multipart = new MimeMultipart();// 正文BodyPart textPart = new MimeBodyPart();// 参数1:正文内容// 参数2:内容类型;字符编码集textPart.setContent("每日工作内容完成情况", "text/html;charset=utf-8");// 附件BodyPart imagePart = new MimeBodyPart();imagePart.setFileName("工作信息.csv"); // 设置附件文件的显示名称// 数据处理对象(读取附件文件从本地磁盘进行读取)imagePart.setDataHandler(new DataHandler(new ByteArrayDataSource(Files.readAllBytes(Paths.get("D:\\工作信息.csv")),"application/octet-stream")));// 添加至邮件内容multipart.addBodyPart(textPart); // 添加正文multipart.addBodyPart(imagePart); // 添加附件// 设置邮件内容msg.setContent(multipart);// 3.发送Transport.send(msg);} catch (Exception e) {e.printStackTrace();}}// 发送邮件时创建Sessionpublic static Session createsession() {// 服务器地址String s = "xxx";// 服务器的连接信息Properties props = new Properties();props.put("mail.smtp.host", s); // 主机号props.put("mail.smtp.port", "25"); // 主机端口号props.put("mail.smtp.auth", "true"); // 是否需要认证props.put("mail.smtp.starttls.enable", "true"); // 启用TLS加密// 创建Session// 参数1:服务器的连接信息// 参数2:用户认证对象(Authenticator接口的匿名实现类)Session session = Session.getInstance(props, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(userName, password);// 邮箱账号和密码}});// 开启调试模式session.setDebug(true);return session;}}

三:

填写信息后尝试运行会报错:

解决方法:

① eclipse默认的jre:

本人使用的是eclipse默认的jre(也就是jdk吧)运行环境,Window>>Preferences>>Java>>Installed JREs下可以查看默认的jre路径,jre目录下选择conf>>security>>java.security文件进行编辑,Ctrl+f快速定位到jdk.tls.disabledAlgorithms,先备份再删除SSLv3, TLSv1, TLSv1.1,

②自己安装的JDK

选择jdk>>jre>>lib>>security>>java.security文件进行上述删除

四:

然后换一个错误:PKIX path building failed

解决方法

新建一个InstallCert.java

import java.io.*;import .URL;import java.security.*;import java.security.cert.*;import .ssl.*;public class InstallCert {public static void main(String[] args) throws Exception {String host;int port;char[] passphrase;if ((args.length == 1) || (args.length == 2)) {String[] c = args[0].split(":");host = c[0];port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);String p = (args.length == 1) ? "changeit" : args[1];passphrase = p.toCharArray();} else {System.out.println("Usage: java InstallCert <host>[:port] [passphrase]");return;}File file = new File("jssecacerts");if (file.isFile() == false) {char SEP = File.separatorChar;File dir = new File(System.getProperty("java.home") + SEP+ "lib" + SEP + "security");file = new File(dir, "jssecacerts");if (file.isFile() == false) {file = new File(dir, "cacerts");}}System.out.println("Loading KeyStore " + file + "...");InputStream in = new FileInputStream(file);KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());ks.load(in, passphrase);in.close();SSLContext context = SSLContext.getInstance("TLS");TrustManagerFactory tmf =TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());tmf.init(ks);X509TrustManager defaultTrustManager = (X509TrustManager)tmf.getTrustManagers()[0];SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);context.init(null, new TrustManager[] {tm}, null);SSLSocketFactory factory = context.getSocketFactory();System.out.println("Opening connection to " + host + ":" + port + "...");SSLSocket socket = (SSLSocket)factory.createSocket(host, port);socket.setSoTimeout(10000);try {System.out.println("Starting SSL handshake...");socket.startHandshake();socket.close();System.out.println();System.out.println("No errors, certificate is already trusted");} catch (SSLException e) {System.out.println();e.printStackTrace(System.out);}X509Certificate[] chain = tm.chain;if (chain == null) {System.out.println("Could not obtain server certificate chain");return;}BufferedReader reader =new BufferedReader(new InputStreamReader(System.in));System.out.println();System.out.println("Server sent " + chain.length + " certificate(s):");System.out.println();MessageDigest sha1 = MessageDigest.getInstance("SHA1");MessageDigest md5 = MessageDigest.getInstance("MD5");for (int i = 0; i < chain.length; i++) {X509Certificate cert = chain[i];System.out.println(" " + (i + 1) + " Subject " + cert.getSubjectDN());System.out.println(" Issuer " + cert.getIssuerDN());sha1.update(cert.getEncoded());System.out.println(" sha1 " + toHexString(sha1.digest()));md5.update(cert.getEncoded());System.out.println(" md5" + toHexString(md5.digest()));System.out.println();}System.out.println("Enter certificate to add to trusted keystore or 'q' to quit: [1]");String line = reader.readLine().trim();int k;try {k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1;} catch (NumberFormatException e) {System.out.println("KeyStore not changed");return;}X509Certificate cert = chain[k];String alias = host + "-" + (k + 1);ks.setCertificateEntry(alias, cert);OutputStream out = new FileOutputStream("jssecacerts");ks.store(out, passphrase);out.close();System.out.println();System.out.println(cert);System.out.println();System.out.println("Added certificate to keystore 'jssecacerts' using alias '"+ alias + "'");}private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();private static String toHexString(byte[] bytes) {StringBuilder sb = new StringBuilder(bytes.length * 3);for (int b : bytes) {b &= 0xff;sb.append(HEXDIGITS[b >> 4]);sb.append(HEXDIGITS[b & 15]);sb.append(' ');}return sb.toString();}private static class SavingTrustManager implements X509TrustManager {private final X509TrustManager tm;private X509Certificate[] chain;SavingTrustManager(X509TrustManager tm) {this.tm = tm;}public X509Certificate[] getAcceptedIssuers() {throw new UnsupportedOperationException();}public void checkClientTrusted(X509Certificate[] chain, String authType)throws CertificateException {throw new UnsupportedOperationException();}public void checkServerTrusted(X509Certificate[] chain, String authType)throws CertificateException {this.chain = chain;tm.checkServerTrusted(chain, authType);}}}

到InstallCert.java的磁盘目录下进入cmd,

①输入javacInstallCert.java

生成两个文件:InstallCert.class,InstallCert$SavingTrustManager.class

②输入javaInstallCert xxx (xxx:服务器地址)

如果出现错误: 找不到或无法加载主类 InstallCert,需要返回上src目录下,再次输入:java 缺失的目录.InstallCert xxx(比如我的:java com.tooling.start.InstallCert xxx)

③输入1

会在同级目录下生成一个jssecacerts文件

eclipse默认jre:把jssecacerts复制到jre>>lib>>security目录下

安装的JDK:把jssecacerts复制到jdk>>jre>>lib>>securiy目录下

五:

再次运行就可以发送邮件了

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。