一个关于JAVAMAIL的问题,以前是没有人问过的。

dr80 2002-05-16 08:56:12
我想把邮件头的一些东西给去掉,或者换成自己的东西,
比如要修改Content-type的值。但是我用removehander,
addhander,sethander,等,都把原来那个头里的Content-type
去不掉。但是如果要修改“from","to"这些值就是可以的。
我现在急需要解决这个问题。

还有一个问题就是,可不可以直接通过一个输入流,或者文本文件(文本内容就是一个邮件)来直接构造一个MIMEMessage对象,生成一封邮件。
MimeMessage中有一个构造函数是可以使用一个Inputstream的。
但是我不知道怎么用,那位大侠写过的。请把代码贴出来好吗?100分送上。
太感谢了!我十分着急用这个东西的!
...全文
47 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
littlecong 2002-08-23
  • 打赏
  • 举报
回复
Content-type是跟data handler 密切相关的,也就是跟data source有关的


这个InputStream是合法的邮件形成的

我曾经写过这样的程序,透过防火墙发信
发信时,生成MimeMessage对象,然后通过socket和防火墙外的servlet通信,把信以流的形式传出,servlet中利用这个输入流重新构造信件
代码大致如下,希望对你有用

//发信
MimeMessage message = getMessage();
if(message == null){
return false;
}
try{
URL url = new URL(mailOutURL);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setDoOutput(true);
OutputStream os = new BufferedOutputStream(connection.getOutputStream());
message.writeTo(os);
os.close();
InputStream is = new BufferedInputStream(connection.getInputStream());
int c = 0;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while((c=is.read())!=-1){
baos.write(c);
}
is.close();
connection.disconnect();
String ok = baos.toString();
baos.close();
if(needKeepRecord){
record(message);
}
if(OK.equals(ok)){
return true;
}else{
setError("...........");
return false;
}


//servlet 重新构造信件

boolean success = true;
Properties props = new Properties();
props.put("mail.smtp.host" , smtpHost);
props.put("mail.host",smtpHost);
Session session = null;
if(userId !=null){
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.user", userId);
props.put("mail.smtp.password",password);
session = javax.mail.Session.getInstance(props,new MyAuthenticator(userId, password));
}else{
session = javax.mail.Session.getDefaultInstance(props,null);
}
session.setDebug(true);
String error = "";
InputStream is =
new BufferedInputStream(
request.getInputStream());
try{
MimeMessage message = new MimeMessage(session, is);
Transport.send(message);
}catch(MessagingException me){
success = false;
me.printStackTrace();
error = me.toString();
}
is.close();
if(success){
out.print(MailSender.OK);
}else{
out.print(MailSender.FAIL + " " + error);
}
wjmmml 2002-08-23
  • 打赏
  • 举报
回复
up

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧