代码:
package com.res.util;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import java.io.UnsupportedEncodingException;
import java.util.*;
public class SendMail {
public static void send(String host, String user, String passsword, String to,
String subject, String text, String attach) {
try {
// 获得属性,并生成Session对象
Properties props = new Properties();
Session sendsession;
Transport transport;
sendsession = Session.getInstance(props, null);
// 向属性中写入SMTP服务器的地址
props.put("mail.smtp.host",host);
// 设置SMTP服务器需要权限认证
props.put("mail.smtp.auth", "true");
// 设置输出调试信息
sendsession.setDebug(true);
// 根据Session生成Message对象
Message message = new MimeMessage(sendsession);
// 设置发信人地址
message.setFrom(new InternetAddress(user));
// 设置收信人地址
message.setRecipient(Message.RecipientType.TO, new InternetAddress(
to));
// 设置e-mail标题
message.setSubject(subject);
// 设置e-mail发送时间
message.setSentDate(new Date());
// 设置e-mail内容
message.setText(text);
// 获得attachment参数
String attachment =attach;
// 如有附件
if (!attachment.equals("")) {
// 建立第一部分:文本正文
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(text);
// 建立多个部分Multipart实例
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
// 建立第二部分:附件
messageBodyPart = new MimeBodyPart();
// 获得附件
DataSource source = new FileDataSource(attachment);
// 设置附件的数据处理器
messageBodyPart.setDataHandler(new DataHandler(source));
// 设置附件文件名
int pos = attachment.lastIndexOf("\\");
attachment = attachment.substring(pos + 1);
//设置附件名字为中文时的编码,解决乱码问题
messageBodyPart.setFileName(MimeUtility.encodeText(attachment));
// 加入第二部分
multipart.addBodyPart(messageBodyPart);
// 将多部分内容放到e-mail中
message.setContent(multipart);
} else {
// 如无附件,则按纯文本格式处理
message.setText(text);
}
// 保存对于e-mail的修改
message.saveChanges();
// 根据Session生成Transport对象
transport = sendsession.getTransport("smtp");
// 连接到SMTP服务器
transport.connect( host, user, passsword);
// 发送e-mail
transport.sendMessage(message, message.getAllRecipients());
// 关闭Transport连接
transport.close();
} catch (MessagingException m) {
System.out.println(m.toString());
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
5 个解决方案
#1
没人知道吗,我觉得应该是windows与linux下的路径问题不同,但是应该怎么解决呢
#2
简单看了下代码没什么问题
把你的症状描述的更详细些
无法发送到底是发送是报错
还是发送后收不到信
还是收到信没附件
“我现在有这么一个邮件发送功能的项目在LINUX下,我现在客户端是windows下访问发送邮件”
如何理解?你用RMI远程调用Linux上的方法?但你的方法是静态的,显然不可能啊。
还是说这东西在Linux下可以运行,到Windows下就罢工?
把你的症状描述的更详细些
无法发送到底是发送是报错
还是发送后收不到信
还是收到信没附件
“我现在有这么一个邮件发送功能的项目在LINUX下,我现在客户端是windows下访问发送邮件”
如何理解?你用RMI远程调用Linux上的方法?但你的方法是静态的,显然不可能啊。
还是说这东西在Linux下可以运行,到Windows下就罢工?
#3
问题是邮件根本就收不到,因为项目配置到linux服务器上,我看不到错,所以我只能看邮箱中有没有信收到。
我的项目是布到linux系统的一台服务器下面,然后我在我本机windows系统,打开IE访问服务器上的项目,点发送邮件传附件就收不到,只发信就可以收到,问题大概就是这个样子的
我的项目是布到linux系统的一台服务器下面,然后我在我本机windows系统,打开IE访问服务器上的项目,点发送邮件传附件就收不到,只发信就可以收到,问题大概就是这个样子的
#4
在catch最后多加一个
这样可以把错误堆栈打印到文件,就好看了
或者用System.setOut重定向标准输出到某个文件
这样所有的System.out都能看到,更方便
不过最好还是用一些成熟的log系统,比会叫方便
比如java log,log4j什么的
cache(Exception e){
OutputStream out = new FileOutputStream("xxx.txt");
e.printStackTrace(out);
}
这样可以把错误堆栈打印到文件,就好看了
或者用System.setOut重定向标准输出到某个文件
这样所有的System.out都能看到,更方便
不过最好还是用一些成熟的log系统,比会叫方便
比如java log,log4j什么的
#5
修正一下
e.printStackTrace要求必须是PrintStream
e.printStackTrace要求必须是PrintStream
cache(Exception e){
PrintStream out = new PrintStream(new FileOutputStream("xxx.txt"));
e.printStackTrace(out);
}
#1
没人知道吗,我觉得应该是windows与linux下的路径问题不同,但是应该怎么解决呢
#2
简单看了下代码没什么问题
把你的症状描述的更详细些
无法发送到底是发送是报错
还是发送后收不到信
还是收到信没附件
“我现在有这么一个邮件发送功能的项目在LINUX下,我现在客户端是windows下访问发送邮件”
如何理解?你用RMI远程调用Linux上的方法?但你的方法是静态的,显然不可能啊。
还是说这东西在Linux下可以运行,到Windows下就罢工?
把你的症状描述的更详细些
无法发送到底是发送是报错
还是发送后收不到信
还是收到信没附件
“我现在有这么一个邮件发送功能的项目在LINUX下,我现在客户端是windows下访问发送邮件”
如何理解?你用RMI远程调用Linux上的方法?但你的方法是静态的,显然不可能啊。
还是说这东西在Linux下可以运行,到Windows下就罢工?
#3
问题是邮件根本就收不到,因为项目配置到linux服务器上,我看不到错,所以我只能看邮箱中有没有信收到。
我的项目是布到linux系统的一台服务器下面,然后我在我本机windows系统,打开IE访问服务器上的项目,点发送邮件传附件就收不到,只发信就可以收到,问题大概就是这个样子的
我的项目是布到linux系统的一台服务器下面,然后我在我本机windows系统,打开IE访问服务器上的项目,点发送邮件传附件就收不到,只发信就可以收到,问题大概就是这个样子的
#4
在catch最后多加一个
这样可以把错误堆栈打印到文件,就好看了
或者用System.setOut重定向标准输出到某个文件
这样所有的System.out都能看到,更方便
不过最好还是用一些成熟的log系统,比会叫方便
比如java log,log4j什么的
cache(Exception e){
OutputStream out = new FileOutputStream("xxx.txt");
e.printStackTrace(out);
}
这样可以把错误堆栈打印到文件,就好看了
或者用System.setOut重定向标准输出到某个文件
这样所有的System.out都能看到,更方便
不过最好还是用一些成熟的log系统,比会叫方便
比如java log,log4j什么的
#5
修正一下
e.printStackTrace要求必须是PrintStream
e.printStackTrace要求必须是PrintStream
cache(Exception e){
PrintStream out = new PrintStream(new FileOutputStream("xxx.txt"));
e.printStackTrace(out);
}