用java代码发送邮件 附件

[size=large][b][color=red]PS:3种示例的代码都在附件压缩包里,每个包一种示例,独立运行
PS:使用的时候请修改配置文件和代码中的邮箱地址和密码[/color][/b][/size]

最近项目中新增了一个功能:自定义异常信息,保存到数据库表中,通过定时任务实时的把异常信息邮件通知给网站维护人员。
网上找了一些示例,整理如下:
[size=large][b]示例1:最基本的demo,配置信息在代码里写死,不方便修改[/b][/size]

[img]http://dl2.iteye.com/upload/attachment/0109/8277/e6c99e06-80ab-3238-ad2a-479873a2c133.jpg[/img]

[b][size=large]示例2:可配置demo,有文本和html两种发送方式[/size][/b]

[img]http://dl2.iteye.com/upload/attachment/0109/8279/0bd2a9f4-d366-3d0b-b078-2a0232d9ad9f.jpg[/img]

[size=large][b]示例3:可配置,支持附件上传[/b][/size]

[img]http://dl2.iteye.com/upload/attachment/0109/8281/88a52d97-4d8d-397e-a907-2a41c745fbbb.jpg[/img]

[size=large][b]开发中碰到的的异常[/b][/size]

DEBUG SMTP: trying to connect to host "localhost", port 25, isSSL false
javax.mail.SendFailedException: Send failure (javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25 (java.net.ConnectException: Connection refused: connect))
at javax.mail.Transport.send(Transport.java:163)
at javax.mail.Transport.send(Transport.java:48)
at com.wasu.util.Test.main(Test.java:51)
Caused by: javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25 (java.net.ConnectException: Connection refused: connect)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1961)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654)
at javax.mail.Service.connect(Service.java:254)
at javax.mail.Service.connect(Service.java:85)
at javax.mail.Service.connect(Service.java:70)
at javax.mail.Transport.send(Transport.java:94)
... 2 more
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:321)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:237)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1927)
... 7 more


原因:之前使用的是maven库中的mail-1.4.7.jar包
解决办法:使用mail.jar的本地包(此包在附件demo中有)
不知道这2个包到底有啥区别,反正用1.4.7的包怎样都不行,一直爆上面的异常,使用mail.jar的包就搞定了。


15年还运行正常的代码16年拿来使用的时候出问题了:
javax.mail.SendFailedException: Sending failed;
nested exception is:
javax.mail.MessagingException: Unknown SMTP host: smtp.163.com;
nested exception is:
java.net.UnknownHostException: smtp.163.com
at javax.mail.Transport.send0(Transport.java:219)
at javax.mail.Transport.send(Transport.java:81)
at email.send1.Test.main(Test.java:54)
15年的时候使用163和qq都可以正常发送邮件的,16年使用的时候出现上面的错误,最终我换成企业邮箱来发送邮件就正常了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用JavaMail API来发送带附件的电子邮件。以下是一个示例代码,展示了如何使用Java Servlet发送带附件的邮件: ```java import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; // 邮件服务器的配置信息 final String username = "your_email@example.com"; final String password = "your_email_password"; final String smtpHost = "smtp.example.com"; final int smtpPort = 587; // 发件人和收件人的电子邮件地址 String fromEmail = "from@example.com"; String toEmail = "to@example.com"; // 创建一个会话对象 Properties props = new Properties(); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.host", smtpHost); props.put("mail.smtp.port", smtpPort); Session session = Session.getInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); try { // 创建一个默认的MimeMessage对象 MimeMessage message = new MimeMessage(session); // 设置发件人 message.setFrom(new InternetAddress(fromEmail)); // 设置收件人 message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail)); // 设置主题 message.setSubject("邮件主题"); // 创建一个Multipart对象,用于存储邮件的各个部分 Multipart multipart = new MimeMultipart(); // 创建邮件正文部分 BodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setText("邮件正文"); multipart.addBodyPart(messageBodyPart); // 创建附件部分 messageBodyPart = new MimeBodyPart(); String filename = "path_to_attachment_file"; DataSource source = new FileDataSource(filename); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(filename); multipart.addBodyPart(messageBodyPart); // 将Multipart对象设置为邮件内容 message.setContent(multipart); // 发送邮件 Transport.send(message); System.out.println("邮件发送成功"); } catch (MessagingException e) { e.printStackTrace(); } ``` 请将代码中的 `your_email@example.com`,`your_email_password`,`smtp.example.com`,`from@example.com`,`to@example.com` 和 `path_to_attachment_file` 替换为你自己的实际信息。 这段代码使用了JavaMail API来创建一个MimeMessage对象,并设置了发件人、收件人、主题和邮件正文。然后,创建了一个Multipart对象,并向其中添加了邮件正文部分和附件部分。最后,将Multipart对象设置为邮件内容,通过Transport类的send()方法发送邮件。 确保你的项目中包含了JavaMail API的相关依赖,并在Servlet的web.xml文件中配置好Servlet的映射和相关参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值