本帖最后由 zlyperson 于 2011-04-09 21:03:21 编辑

解决方案 »

  1.   

    package com;import javax.mail.*;
    import javax.mail.internet.*;
    import javax.activation.*;
    import java.util.*;
    import java.net.*;
    import java.io.*;
    public class Wt { private static String SmtpHost = "smtp.sohu.com";// 发送邮件的smtp服务器 private static String MailUser = "xxxxx";// 发送邮件的用户名 private static String MailPwd = "xxxxx";// 发送邮件的密码 public Wt(boolean rFlag) { this.setSmtpHost(SmtpHost, smtpPort); this.setSmtpAuthentication(MailUser, MailPwd); } public static void main(String args[]) throws Exception { System.out.println("Start............."); long s = System.currentTimeMillis(); Wt mail = new Wt(false); mail.setFrom("xxxxxx");//自己邮箱地址
    mail.setTo("xxxxx");// 邮件发送目的地 mail.setSubject("Test");//邮件标题 String Body = "";//邮件内容
    for (int i = 0; i < 10; i++) {
    Body += "内容多了就发不出去了,但是用Foxmail同样长的却可以发出去";
    } mail.setBody(Body); mail.send(); long e = System.currentTimeMillis(); System.out.println("send:end.............." + (e - s));
    } /**
     * 发送邮件
     */
    public void send() {
    try {
    Properties server = new Properties();
    if (this.smtpHost == null) {
    throw new NullPointerException("Please set SMTP host");
    } else {
    server.put("mail.smtp.host", this.smtpHost);
    }
    server.put("mail.smtp.port", String.valueOf(this.smtpPort));
    if (this.isAuthenticationSMTP) {
    server.put("mail.smtp.auth", "true");
    } Session conn = Session.getInstance(server, null); MimeMessage msg = new MimeMessage(conn);
    if (this.from == null) {
    throw new NullPointerException("Please set FROM address");
    } else {
    msg.setFrom(new InternetAddress(this.from));
    }
    if (this.to != null) {
    msg.setRecipients(Message.RecipientType.TO, this.to);
    } if (this.cc != null) {
    msg.setRecipients(Message.RecipientType.CC, this.cc);
    }
    if (this.bcc != null) {
    msg.setRecipients(Message.RecipientType.BCC, this.bcc);
    } sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
    msg.setSubject("=?GB2312?B?" + enc.encode(this.title.getBytes())
    + "?="); if (!hasAttachment()) {
    // 如果没有带附件
    if (this.isHtmlModeMail()) {
    // 是HTML格式的邮件
    if (!this.hasHtmlDesc()) {
    msg.setContent(this.content, this.content_type);
    } else {
    Multipart mp = new MimeMultipart();
    MimeBodyPart mbp = null; mbp = new MimeBodyPart();
    mbp.setContent(this.content, this.content_type);
    mp.addBodyPart(mbp); mbp = new MimeBodyPart();
    mbp.setContent(this.htmlMailDesc, this.MODE_TEXT);
    mp.addBodyPart(mbp); msg.setContent(mp);
    }
    } else {
    // 是文本格式的邮件
    msg.setText(this.content);
    } } else {
    // 有附件
    Multipart mp = new MimeMultipart();
    MimeBodyPart mbp = null;
    // 邮件正文
    for (int i = 0; i < vFiles.size(); i++) {
    mbp = new MimeBodyPart();
    File file = (File) vFiles.get(i);
    FileDataSource fds = new FileDataSource(file);
    mbp.setDataHandler(new DataHandler(fds));
    // mbp.setFileName(StringUtil.ISO8859_1(file.getName()));
    mbp.setFileName(file.getName());
    mp.addBodyPart(mbp);
    }
    for (int i = 0; i < vURLs.size(); i++) {
    mbp = new MimeBodyPart();
    URL url = (URL) vURLs.get(i);
    // URLDataSource uds=new URLDataSource(url);
    mbp.setDataHandler(new DataHandler(url));
    // mbp.setFileName(StringUtil.ISO8859_1(url.getFile()));
    mbp.setFileName(url.getFile());
    mp.addBodyPart(mbp);
    } mbp = new MimeBodyPart();
    mbp.setContent(this.content, this.content_type);
    mp.addBodyPart(mbp); if (this.isHtmlModeMail() && this.hasHtmlDesc()) {
    mbp = new MimeBodyPart();
    mbp.setContent(this.htmlMailDesc, this.MODE_TEXT);
    mp.addBodyPart(mbp);
    } msg.setContent(mp);
    }
    msg.saveChanges();
    if (this.isAuthenticationSMTP) {
    Transport transport = conn.getTransport("smtp");
    transport.connect(this.smtpHost, this.smtpUser,
    this.smtpPassword);
    transport.sendMessage(msg, msg.getAllRecipients());
    transport.close();
    } else {
    Transport.send(msg, msg.getAllRecipients());
    } } catch (javax.mail.internet.AddressException e) {
    e.printStackTrace();
    } catch (javax.mail.MessagingException e) {
    e.printStackTrace();
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    } public boolean isValidEmailAddress(String email) {
    if (email == null)
    return false;
    if (email.indexOf("@") > 0)
    return !email.endsWith("@");
    return false;
    } private Address[] getAddress(String[] add) {
    Address[] a = new Address[add.length];
    for (int i = 0; i < add.length; i++) {
    try {
    a[i] = new InternetAddress(add[i]);
    } catch (AddressException ex) {
    ex.printStackTrace();
    }
    }
    return a;
    } public boolean isHtmlModeMail() {
    return this.content_type.equals(this.MODE_HTML);
    } public boolean hasHtmlDesc() {
    if (!this.isHtmlModeMail())
    return false;
    return !(this.htmlMailDesc == null);
    } public static final String MODE_HTML = "text/html;charset=gb2312"; /**
     * 普通模式
     */
    public static final String MODE_TEXT = "text/plain;charset=gb2312"; /**
     * HTML模式
     */ private Address[] to = null; private Address[] cc = null; private Address[] bcc = null; private String from = ""; private String title = ""; private String content = ""; private String smtpHost = ""; private int smtpPort = 25; private String content_type = MODE_TEXT; private String htmlMailDesc = ""; private String smtpUser = ""; private String smtpPassword = ""; private boolean isAuthenticationSMTP = true; private Vector vFiles = new Vector(); private Vector vURLs = new Vector(); public Wt() {
    } /**
     * 设置SMTP服务器,使用默认端口
     * 
     * @param server
     *            SMTP服务器IP
     */
    public void setSmtpHost(String server) {
    this.smtpHost = server;
    } /**
     * 设置SMTP服务器
     * 
     * @param server
     *            SMTP服务器IP
     * @param port
     *            端口
     */
    public void setSmtpHost(String server, int port) {
    this.smtpHost = server;
    this.smtpPort = port;
    } /**
     * 设置收件人地址
     * 
     * @param aEmail
     *            收件人Email地址
     */
    public void setTo(String aEmail) {
    String[] s = new String[1];
    s[0] = aEmail;
    this.to = getAddress(s);
    } /**
     * 设置多个收件人地址
     * 
     * @param Emails
     *            收件人Email地址
     */
    public void setTo(String[] Emails) {
    this.to = getAddress(Emails);
    } /**
     * 设置抄送地址
     * 
     * @param aEmail
     *            抄送地址
     */
    public void setCC(String aEmail) {
    String[] s = new String[1];
    s[0] = aEmail;
    this.cc = getAddress(s);
    } /**
     * 设置多个抄送地址
     * 
     * @param Emails
     *            抄送地址
     */
    public void setCC(String[] Emails) {
    this.cc = getAddress(Emails);
    } /**
     * 设置暗送地址
     * 
     * @param Emails
     *            暗送地址
     */ public void setBCC(String aEmail) {
    String[] s = new String[1];
    s[0] = aEmail;
    this.bcc = getAddress(s);
    } /**
     * 设置多个暗送地址
     * 
     * @param Emails
     *            暗送地址
     */
    public void setBCC(String[] Emails) {
    this.bcc = getAddress(Emails);
    } /**
     * 设置发件人地址
     * 
     * @param aEmail
     *            发件人地址
     */
    public void setFrom(String aEmail) {
    // if(!isValidEmailAddress(aEmail)){
    // throw new MyException("Invalid Email Address");
    // }
    this.from = aEmail;
    } /**
     * 设置邮件主题
     * 
     * @param mailTitle
     *            邮件主题
     */
    public void setSubject(String mailTitle) {
    this.title = mailTitle;
    } /**
     * 设置邮件文字内容
     * 
     * @param mailContent
     *            邮件文字内容
     */
    public void setBody(String mailContent) {
    this.content = mailContent;
    } /**
     * 设置邮件字符类型
     * 
     * @param contentType
     *            请从静态变量TEXT和HTML中选择
     */
    public void setContentType(String contentType) {
    this.content_type = contentType;
    } /**
     * 设置HTML格式邮件在一般模式下显示的说明
     * 
     * @param desc
     *            说明文字
     */
    public void setHtmlMailDesc(String desc) {
    this.htmlMailDesc = desc;
    } /**
     * 设置SMTP服务器用户认证
     * 
     * @param username
     *            用户名
     * @param password
     *            密码
     */
    public void setSmtpAuthentication(String username, String password) {
    this.smtpUser = username;
    this.smtpPassword = password;
    this.isAuthenticationSMTP = true; } /**
     * 添加附件
     * 
     * @param afile
     *            本地文件
     */
    public void addAttachment(File afile) {
    vFiles.add(afile);
    } /**
     * 添加附件
     * 
     * @param fileURL
     *            文件URL
     */
    public void addAttachment(URL fileURL) {
    vURLs.add(fileURL);
    } /**
     * 标示邮件是否附带附件
     * 
     * @return
     */
    public boolean hasAttachment() {
    return vFiles.size() + vURLs.size() > 0;
    }}
      

  2.   

    不好意思啊。。应该是3000那个是我测试什么时候是阀值用的啊。
    我的实际内容是15k就不能发发送了。但是我用foxmail却可以发啊
      

  3.   


    String Body = "";//邮件内容
            for (int i = 0; i < 10000; i++) {//这里应该是10000
                Body += "内容多了就发不出去了,但是用Foxmail同样长的却可以发出去";
            }        mail.setBody(Body);
      

  4.   

     现在java发邮件有两种啊,一种是jmail,还有一种是Apache新出的插件,很强大,也比这个简单。可以收发邮件啊
      

  5.   

    我用腾讯的邮箱 过了
      String Body = "";
                for (int i = 0; i < 10000; i++) {
                    Body += "内容多了就发不出去了,但是用Foxmail同样长的却可以发出去"+i;
                }
      

  6.   

    个人感觉好像和邮件服务器有关系。我用了163和qq的,163的不行,qq没问题