求一用JAVA做的一个发邮件的程序(急)!

求一用JAVA做的一个发邮件的程序(急)!,第1张

这是我以前用的 现在有些需要验证的邮箱可用用不了,用不了的话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格式的邮件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10128693.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存