JAVAMail附件问题(解决就结贴)

liufei8463 2007-02-26 10:41:10
近日才搞javamail 请教大家个问题,我看到都是用FileDataSource,就是能不能不写文件,直接将指定字符串当文本附件发送出去.请大家给点例子或者是提示
...全文
593 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
colinmok 2007-02-27
  • 打赏
  • 举报
回复
里面的中文作相应的修改,换成你想要的语句..
colinmok 2007-02-27
  • 打赏
  • 举报
回复
我以前做的,JSP中直接调用吧
package SendMail;

/**
* <p>Title:邮件发送 </p>
* <p>Description:邮件发送 </p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company:GZLH </p>
* @author colinmok
* @version 1.0
*/


import java.util.*;
import java.util.Properties;
import java.util.Date;
import javax.mail.Session;
import javax.mail.Message;
import javax.mail.Transport;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.InternetAddress;

public class SendMail {
private static final String smtphost="";
private static final String user="";
private static final String password="";
private static final String from="";
private static final String to="";
private static final String toUserName="";
private static final String toUserPwd="";

public SendMail() {
/**
* 例子
* String smtphost = "smtp.now.net.cn"; // 发送邮件服务器
* String user = "yauboo"; // 邮件服务器登录用户名
* String password = "xxx"; // 邮件服务器登录密码
* String from = "yauboo@now.net.cn"; // 发送人邮件地址
* String to = "yauboo@now.net.cn"; // 接受人邮件地址
* String subject = "Java Mail Subject!"; // 邮件标题
* String body = "Java Mail Body!"; // 邮件内容
*/
}

public static void Mail(String smtphost,String user,String password,
String from,String to,String toUserName,String toUserPwd) {
smtphost = GBCoding.getStrFromISO(smtphost);
user = GBCoding.getStrFromISO(user);
password = GBCoding.getStrFromISO(password);
from = GBCoding.getStrFromISO(from);
to = GBCoding.getStrFromISO(to);
toUserName = GBCoding.getStrFromISO(toUserName);
toUserPwd = GBCoding.getStrFromISO(toUserPwd);

System.out.println("调用函数##########################################");
System.out.println("smtphost:" + smtphost);
System.out.println("user:" + user);
System.out.println("password:" + password);
System.out.println("from:" + from);
System.out.println("to:" + to);
System.out.println("toUserName:" + toUserName);
System.out.println("toUserPwd:" + toUserPwd);

try {

Properties props = System.getProperties();

props.put("mail.smtp.host", smtphost);
props.put("mail.smtp.auth","true");

Session session = Session.getInstance(props, null);
MimeMessage mimeMessage = new MimeMessage(session);

mimeMessage.setFrom(new InternetAddress(from, "管理员", "gb2312"));

mimeMessage.setRecipients(Message.RecipientType.TO, to);
//iso-8859-1
mimeMessage.setSubject("取回密码!", "gb2312");
mimeMessage.setText("尊敬的"+toUserName+":你的密码是"+toUserPwd+",请注意保管!", "gb2312");
mimeMessage.setHeader("Content-Type", "text/html");
mimeMessage.setSentDate(new Date());


Transport transport = session.getTransport("smtp");
transport.connect(smtphost, user, password);
transport.sendMessage(mimeMessage, mimeMessage.getRecipients(Message.RecipientType.TO));
// transport.send(mimeMessage);
transport.close();
System.out.println("结束##########################################");
}
catch (Exception e) {
e.printStackTrace();
}
}

public static String getStrFromISO(String str) {
try {
String temp_p = str;
byte[] temp_t = temp_p.getBytes("ISO8859-1");
String temp = new String(temp_t, "GBK");
return temp;
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}

}
flyforlove 2007-02-27
  • 打赏
  • 举报
回复
其实如果只是文本的话,和普通发送一个bodypart一样,只要添加一个setFileName就可以当作附件来发送了。

MimeBodyPart mbp = new MimeBodyPart();
mbp.setText("This is a test");
mbp.setFileName("test.txt");
flyforlove 2007-02-27
  • 打赏
  • 举报
回复
当然根据ByteArrayDataSource的api,也可以更加简单

MimeBodyPart mbp = new MimeBodyPart();
ByteArrayDataSource bads = new ByteArrayDataSource("this is a test","text/plain");
mbp.setDataHandler(new DataHandler(bads));
mbp.setFileName("test.txt");
flyforlove 2007-02-27
  • 打赏
  • 举报
回复
使用ByteArrayDataSource类型数据源

MimeBodyPart mbp = new MimeBodyPart();
byte[] bytes = "this is a test".getBytes();
ByteArrayDataSource bads = new ByteArrayDataSource(bytes,"text/plain");
mbp.setDataHandler(new DataHandler(bads));
mbp.setDescription(Part.ATTACHMENT);
mbp.setFileName("test.txt");
journay 2007-02-26
  • 打赏
  • 举报
回复
先创建一个FileDataSource对象,然后用FileDataSource.getInputStream方法返回一个输入流,把string写入试一下吧
liufei8463 2007-02-26
  • 打赏
  • 举报
回复
写文件效率太低我也想过 你说的第1种我不知道怎么做
journay 2007-02-26
  • 打赏
  • 举报
回复
哦,呵呵,sorry,我觉得可以采用以下2种方式:
1、看看是否能把字符串转换为FileDataSource
2、string直接写入一个临时文件
liufei8463 2007-02-26
  • 打赏
  • 举报
回复
汗....你看这句String s1="c:\\xxx.JPG";
FileDataSource fds = new FileDataSource(s1); 不就是指定文件写么..晕哦 ..你看清楚我的问题啊...还是谢谢你
journay 2007-02-26
  • 打赏
  • 举报
回复
看看这个
<%@ page import="java.util.*, javax.mail.*, javax.mail.internet.*, javax.activation.*"%>
<%@ page contentType="text/html;charset=gb2312"%>
<%
MimeBodyPart mbpart = new MimeBodyPart();
String s1="c:\\xxx.JPG";
FileDataSource fds = new FileDataSource(s1);
mbpart.setDataHandler(new DataHandler(fds));
mbpart.setFileName(fds.getName());
Multipart mpart = new MimeMultipart();
mpart.addBodyPart(mbpart);


Properties props = new Properties();
props.put("mail.smtp.host", "smtp.xxx.com");
Session s = Session.getInstance(props,null);

MimeMessage message = new MimeMessage(s);

InternetAddress from = new InternetAddress("xxx@xxx.com");
message.setFrom(from);
String toAddress = "xxx@xxx.com";
InternetAddress to = new InternetAddress(toAddress);

message.addRecipient(Message.RecipientType.TO, to);

message.setContent(mpart);
Transport.send(message);
liufei8463 2007-02-26
  • 打赏
  • 举报
回复
楼上的貌似不能发送附件啊
journay 2007-02-26
  • 打赏
  • 举报
回复
/*
* 创建日期 2007-1-30
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package mail;

import java.io.UnsupportedEncodingException;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
* @author Administrator
* @param
*
* TODO 要更改此生成的类型注释的模板,请转至 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
public class SendMail
{
public static void main(String[] args)
{
String host ="";
String from = "t@inspur.com";
String to = "chensong@inspur.com";

Properties props = new Properties();
props.put("mail.smtp.host", "mail.inspur.com");

Session session = Session.getDefaultInstance(props, null);
MimeMessage message = new MimeMessage(session);

try
{
InternetAddress address = new InternetAddress("chensong@inspur.com","test");
InternetAddress toAddress = new InternetAddress("chensong@inspur.com","chensong");

message.setContent("test", "text/plain");
message.setSubject("标题");
message.setFrom(address);

// message.addRecipient(Message.RecipientType.TO,
// new InternetAddress(to));

// Transport transport = session.getTransport("smtp");
// transport.connect("mail.inspur.com", "cs", "11111111Qw");
// transport.sendMessage(message, message.getAllRecipients());
// transport.close();

message.addRecipient(Message.RecipientType.TO,toAddress);
Transport.send(message);
System.out.println("ok!");
} catch (UnsupportedEncodingException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (MessagingException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}


}
}

62,615

社区成员

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

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