这是我以前用的 现在有些需要验证的邮箱可用用不了,用不了的话HI我
package mail;
import javautil;
import javaxmail;
import javaxmailinternet;
public class SendMail{
public static void main(String[] args) {
send("标题","内容");
}
public static void send(String h ,String b ) {
try {
Properties p = new Properties(); //Properties p = SystemgetProperties();
pput("mailsmtpauth", "true");
pput("mailtransportprotocol", "smtp");
pput("mailsmtphost", "smtp139com");
pput("mailsmtpport", "25");
//建立会话
Session session = SessiongetInstance(p);
MimeMessage msg = new MimeMessage(session); //建立信息
msgsetFrom(new InternetAddress("bjyyzx@139com")); //发件人
// msgsetRecipient(MimeMessageRecipientTypeTO,
// new InternetAddress("rewfff@139com zhu_yajun@139com")); //收件人
Address []address=new Address[]{new InternetAddress("bbb@139com"),new InternetAddress("aaa@139com")};
msgsetRecipients(MimeMessageRecipientTypeTO,
address); //收件人
msgsetSentDate(new Date()); // 发送日期
msgsetSubject(h); // 主题
msgsetText(b); //内容
// 邮件服务器进行验证
Transport tran = sessiongetTransport("smtp");
tranconnect("smtp139com", "bluebit_cn", "xiaohao");
// bluebit_cn是用户名,xiaohao是密码
transendMessage(msg, msggetAllRecipients()); // 发送
//Systemoutprintln("邮件发送成功");
} catch (Exception e) {
eprintStackTrace();
}
}}
package bydcore;
import javaioBufferedReader;
import javaioFile;
import javaioFileInputStream;
import javaioFileNotFoundException;
import javaioIOException;
import javaioInputStream;
import javaioInputStreamReader;
import javaioPrintWriter;
import javaioUnsupportedEncodingException;
import javanetSocket;
import javaniocharsetCharset;
import javatextSimpleDateFormat;
import javautilArrayList;
import javautilDate;
import javautilHashMap;
import javautilList;
import javautilMap;
import sunmiscBASE64Encoder;
/
该类使用Socket连接到邮件服务器, 并实现了向指定邮箱发送邮件及附件的功能。
@author Kou Hongtao
/
public class Email {
/
换行符
/
private static final String LINE_END = "\r\n";
/
值为“true”输出高度信息(包括服务器响应信息),值为“ false”则不输出调试信息。
/
private boolean isDebug = true;
/
值为“true”则在发送邮件{@link Mail#send()} 过程中会读取服务器端返回的消息,
并在邮件发送完毕后将这些消息返回给用户。
/
private boolean isAllowReadSocketInfo = true;
/
邮件服务器地址
/
private String host;
/
发件人邮箱地址
/
private String from;
/
收件人邮箱地址
/
private List<String> to;
/
抄送地址
/
private List<String> cc;
/
暗送地址
/
private List<String> bcc;
/
邮件主题
/
private String subject;
/
用户名
/
private String user;
/
密码
/
private String password;
/
MIME邮件类型
/
private String contentType;
/
用来绑定多个邮件单元{@link #partSet}
的分隔标识,我们可以将邮件的正文及每一个附件都看作是一个邮件单元 。
/
private String boundary;
/
邮件单元分隔标识符,该属性将用来在邮件中作为分割各个邮件单元的标识 。
/
private String boundaryNextPart;
/
传输邮件所采用的编码
/
private String contentTransferEncoding;
/
设置邮件正文所用的字符集
/
private String charset;
/
内容描述
/
private String contentDisposition;
/
邮件正文
/
private String content;
/
发送邮件日期的显示格式
/
private String simpleDatePattern;
/
附件的默认MIME类型
/
private String defaultAttachmentContentType;
/
邮件单元的集合,用来存放正文单元和所有的附件单元。
/
private List<MailPart> partSet;
private List<MailPart> alternativeList;
private String mixedBoundary;
private String mixedBoundaryNextPart;
/
不同类型文件对应的{@link MIME} 类型映射。在添加附件
{@link #addAttachment(String)} 时,程序会在这个映射中查找对应文件的
{@link MIME} 类型,如果没有, 则使用
{@link #defaultAttachmentContentType} 所定义的类型。
/
private static Map<String, String> contentTypeMap;
private static enum TextType {
PLAIN("plain"), HTML("html");
private String v;
private TextType(String v) {
thisv = v;
}
public String getValue() {
return thisv;
}
}
static {
// MIME Media Types
contentTypeMap = new HashMap<String, String>();
contentTypeMapput("xls", "application/vndms-excel");
contentTypeMapput("xlsx", "application/vndms-excel");
contentTypeMapput("xlsm", "application/vndms-excel");
contentTypeMapput("xlsb", "application/vndms-excel");
contentTypeMapput("doc", "application/msword");
contentTypeMapput("dot", "application/msword");
contentTypeMapput("docx", "application/msword");
contentTypeMapput("docm", "application/msword");
contentTypeMapput("dotm", "application/msword");
}
/
该类用来实例化一个正文单元或附件单元对象,他继承了 {@link Mail}
,在这里制作这个子类主要是为了区别邮件单元对象和邮件服务对象 ,使程序易读一些。
这些邮件单元全部会放到partSet 中,在发送邮件 {@link #send()}时, 程序会调用
{@link #getAllParts()} 方法将所有的单元合并成一个符合MIME格式的字符串。
@author Kou Hongtao
/
private class MailPart extends Email {
public MailPart() {
}
}
/
默认构造函数
/
public Email() {
defaultAttachmentContentType = "application/octet-stream";
simpleDatePattern = "yyyy-MM-dd HH:mm:ss";
boundary = "--=_NextPart_zlz_3907_" + SystemcurrentTimeMillis();
boundaryNextPart = "--" + boundary;
contentTransferEncoding = "base64";
contentType = "multipart/mixed";
charset = CharsetdefaultCharset()name();
partSet = new ArrayList<MailPart>();
alternativeList = new ArrayList<MailPart>();
to = new ArrayList<String>();
cc = new ArrayList<String>();
bcc = new ArrayList<String>();
mixedBoundary = "=NextAttachment_zlz_" + SystemcurrentTimeMillis();
mixedBoundaryNextPart = "--" + mixedBoundary;
}
/
根据指定的完整文件名在 {@link #contentTypeMap} 中查找其相应的MIME类型,
如果没找到,则返回 {@link #defaultAttachmentContentType}
所指定的默认类型。
@param fileName
文件名
@return 返回文件对应的MIME类型。
/
private String getPartContentType(String fileName) {
String ret = null;
if (null != fileName) {
int flag = fileNamelastIndexOf("");
if (0 <= flag && flag < fileNamelength() - 1) {
fileName = fileNamesubstring(flag + 1);
}
ret = contentTypeMapget(fileName);
}
if (null == ret) {
ret = defaultAttachmentContentType;
}
return ret;
}
/
将给定字符串转换为base64编码的字符串
@param str
需要转码的字符串
@param charset
原字符串的编码格式
@return base64编码格式的字符
/
private String toBase64(String str, String charset) {
if (null != str) {
try {
return toBase64(strgetBytes(charset));
} catch (UnsupportedEncodingException e) {
eprintStackTrace();
}
}
return "";
}
/
将指定的字节数组转换为base64格式的字符串
@param bs
需要转码的字节数组
@return base64编码格式的字符
/
private String toBase64(byte[] bs) {
return new BASE64Encoder()encode(bs);
}
/
将给定字符串转换为base64编码的字符串
@param str
需要转码的字符串
@return base64编码格式的字符
/
private String toBase64(String str) {
return toBase64(str, CharsetdefaultCharset()name());
}
/
将所有的邮件单元按照标准的MIME格式要求合并。
@return 返回一个所有单元合并后的字符串。
/
private String getAllParts() {
StringBuilder sbd = new StringBuilder(LINE_END);
sbdappend(mixedBoundaryNextPart);
sbdappend(LINE_END);
sbdappend("Content-Type: ");
sbdappend("multipart/alternative");
sbdappend(";");
sbdappend("boundary=\"");
sbdappend(boundary)append("\""); // 邮件类型设置
sbdappend(LINE_END);
sbdappend(LINE_END);
sbdappend(LINE_END);
addPartsToString(alternativeList, sbd, getBoundaryNextPart());
sbdappend(getBoundaryNextPart())append("--");
sbdappend(LINE_END);
addPartsToString(partSet, sbd, mixedBoundaryNextPart);
sbdappend(LINE_END);
sbdappend(mixedBoundaryNextPart)append("--");
sbdappend(LINE_END);
// sbdappend(boundaryNextPart)
// append(LINE_END);
alternativeListclear();
partSetclear();
return sbdtoString();
}
首先Java发送邮件需要用到JavaMail,先到Oracle官网上下载好最新版本的JavaMail(刚才看了一下,最新是153),把下载的这个jar文件放到classpath里(如果是Web项目,就放到WEB-INF/lib目录下。
JavaMail主要支持发送纯文本的和html格式的邮件。
发送html格式的邮件的一个例程如下:
import javaxmailinternetInternetAddress;import javaxmailinternetMimeMessage;
import javaxmailinternetMimeUtility;
import javaxmailSession;
import javaxmailMessagingException;
import javaxmailTransport;
public class SendHtmlMail {
public static void sendMessage(String smtpHost,
String from, String to,
String subject, String messageText)
throws MessagingException,javaioUnsupportedEncodingException {
// Step 1: Configure the mail session
Systemoutprintln("Configuring mail session for: " + smtpHost);
javautilProperties props = new javautilProperties();
propssetProperty("mailsmtpauth", "true");//指定是否需要SMTP验证
propssetProperty("mailsmtphost", smtpHost);//指定SMTP服务器
propsput("mailtransportprotocol", "smtp");
Session mailSession = SessiongetDefaultInstance(props);
mailSessionsetDebug(true);//是否在控制台显示debug信息
// Step 2: Construct the message
Systemoutprintln("Constructing message - from=" + from + " to=" + to);
InternetAddress fromAddress = new InternetAddress(from);
InternetAddress toAddress = new InternetAddress(to);
MimeMessage testMessage = new MimeMessage(mailSession);
testMessagesetFrom(fromAddress);
testMessageaddRecipient(javaxmailMessageRecipientTypeTO, toAddress);
testMessagesetSentDate(new javautilDate());
testMessagesetSubject(MimeUtilityencodeText(subject,"gb2312","B"));
testMessagesetContent(messageText, "text/html;charset=gb2312");
Systemoutprintln("Message constructed");
// Step 3: Now send the message
Transport transport = mailSessiongetTransport("smtp");
transportconnect(smtpHost, "webmaster", "password");
transportsendMessage(testMessage, testMessagegetAllRecipients());
transportclose();
Systemoutprintln("Message sent!");
}
public static void main(String[] args) {
String smtpHost = "localhost";
String from = "webmaster@mymailcom";
String to = "mfc42d@sohucom";
String subject = "html邮件测试"; //subject javamail自动转码
StringBuffer theMessage = new StringBuffer();
theMessageappend("<h2><font color=red>这倒霉孩子</font></h2>");
theMessageappend("<hr>");
theMessageappend("<i>年年失望年年望</i>");
try {
SendHtmlMailsendMessage(smtpHost, from, to, subject, theMessagetoString());
}
catch (javaxmailMessagingException exc) {
excprintStackTrace();
}
catch (javaioUnsupportedEncodingException exc) {
excprintStackTrace();
}
}
}
JavaMail是封装了很多邮件 *** 作的,所以使用起来不很困难,建议你到JavaMail官网看一下API或下载Java Doc API文档。
1,去读一读SMTP协议的命令。command not implemented 说明是不支持的命令。建议你先到DOS下,或者其他工具,telnet 服务器IP 25
的界面下,可以发送了,再来写程序
2,Java发送邮件,用JMail吧。
1首先你需要一个邮箱中转发送站(听着很高端的样子),说白了就是注册一个邮箱作为你的发送邮件平台,然后通过编程调用平台发送邮件(也就是你注册某个邮箱,然后开通SMTP/POP3协议,在编程中,拿着你的KEY去发送邮件),我试过很多种邮箱,QQ貌似不能用,网易经常报错,建议用新浪的,我用基本没出过问题。
2去网上下载java开源的发送邮件工具类:mailjar,并导入myeclipse/eclipse的引用。
3编程(工具类)
package comvictor;
import javaioFile;
import javaioIOException;
import javaioInputStream;
import javautilProperties;
import javaxactivationDataHandler;
import javaxactivationDataSource;
import javaxactivationFileDataSource;
import javaxmailBodyPart;
import javaxmailMessage;
import javaxmailMessagingException;
import javaxmailMultipart;
import javaxmailSession;
import javaxmailTransport;
import javaxmailinternetInternetAddress;
import javaxmailinternetMimeBodyPart;
import javaxmailinternetMimeMessage;
import javaxmailinternetMimeMultipart;
import javaxmailinternetMimeUtility;
public class JavaMailWithAttachment {
private MimeMessage message;
private Session session;
private Transport transport;
private String mailHost = "";
private String sender_username = "";
private String sender_password = "";
private Properties properties = new Properties();
/
初始化方法
/
public JavaMailWithAttachment(boolean debug) {
InputStream in = JavaMailWithAttachmentclassgetResourceAsStream("/MailServerproperties");
try {
propertiesload(in);
thismailHost = propertiesgetProperty("mailsmtphost");
thissender_username = propertiesgetProperty("mailsenderusername");
thissender_password = propertiesgetProperty("mailsenderpassword");
} catch (IOException e) {
eprintStackTrace();
}
session = SessiongetInstance(properties);
sessionsetDebug(debug);//开启后有调试信息
message = new MimeMessage(session);
}
/
发送邮件
@param subject
邮件主题
@param sendHtml
邮件内容
@param receiveUser
收件人地址
@param attachment
附件
/
public void doSendHtmlEmail(String subject, String sendHtml, String receiveUser, File attachment) {
try {
// 发件人
InternetAddress from = new InternetAddress(sender_username);
messagesetFrom(from);
// 收件人
InternetAddress to = new InternetAddress(receiveUser);
messagesetRecipient(MessageRecipientTypeTO, to);
// 邮件主题
messagesetSubject(subject);
// 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
Multipart multipart = new MimeMultipart();
// 添加邮件正文
BodyPart contentPart = new MimeBodyPart();
contentPartsetContent(sendHtml, "text/html;charset=UTF-8");
multipartaddBodyPart(contentPart);
// 添加附件的内容
if (attachment != null) {
BodyPart attachmentBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(attachment);
attachmentBodyPartsetDataHandler(new DataHandler(source));
// 网上流传的解决文件名乱码的方法,其实用MimeUtilityencodeWord就可以很方便的搞定
// 这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
//sunmiscBASE64Encoder enc = new sunmiscBASE64Encoder();
//messageBodyPartsetFileName("=GBKB" + encencode(attachmentgetName()getBytes()) + "=");
//MimeUtilityencodeWord可以避免文件名乱码
attachmentBodyPartsetFileName(MimeUtilityencodeWord(attachmentgetName()));
multipartaddBodyPart(attachmentBodyPart);
}
// 将multipart对象放到message中
messagesetContent(multipart);
// 保存邮件
messagesaveChanges();
transport = sessiongetTransport("smtp");
// smtp验证,就是你用来发邮件的邮箱用户名密码
transportconnect(mailHost, sender_username, sender_password);
// 发送
transportsendMessage(message, messagegetAllRecipients());
Systemoutprintln("send success!");
} catch (Exception e) {
eprintStackTrace();
} finally {
if (transport != null) {
try {
transportclose();
} catch (MessagingException e) {
eprintStackTrace();
}
}
}
}
public static void main(String[] args) {
JavaMailWithAttachment se = new JavaMailWithAttachment(true);
Systemoutprintln(se);
File affix = new File("E:\\测试-testtxt");
// File affix =null;
sedoSendHtmlEmail("##", "###", "####@##com", affix);//
}
}
注意点:1 jar可能有冲突,如果是demo可以直接应用mailjar
如果是一个工程则要替换javaEE中的mailjar包
2 关于properties配置文件的地址问题
ClassgetResourceAsStream(String path) : path 不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从
ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。
以上就是关于求一用JAVA做的一个发邮件的程序(急)!全部的内容,包括:求一用JAVA做的一个发邮件的程序(急)!、如何写一个JAVA类可以实现邮件发送功能,也可以实现群发功能、如何用java实现发送html格式的邮件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)