1.1 邮件组成部分
如果是新邮件就获取,并解析它;邮件是由邮件头和邮件体组成,在邮件头中主要包含了收件人、发件人、主题等等基础信息。而邮件体中就包括了邮件的正文和附件内容信息。下图就是pop3协议下,邮件的大致内容。
1.2 发送邮件(带附件、正文带图片
QQ邮箱为例:  需要QQ账号和QQ登录第三方客户端时,密码框的“授权码”(相当于密码)
授权码如下获取:
代码如下:
public class JavaMailboxAttachment {
    private MimeMessage message;
    private Session session;
    private String mailHost = "";
    private String mailAuth = "";
    private String mailPort = "";
    private String sender_username = "";
private String sender_password = "";
//定义一个Properties 用于存放信息
    private Properties properties = new Properties();
    //-------------------------------发信箱---------------------------------------------
    public JavaMailboxAttachment(String email_type) {
        try {
    properties.put("mail.smtp.host","smtp.qq");    //发送邮件服务器
            //端口号,QQ邮箱给出了两个端口,但是另一个我一直使用不了,所以就给出这一个587
    properties.put("mail.smtp.port", "587");          //发送邮件端口号
    properties.put("mail.smtp.auth", "true"); 
            // 此处填写你的账号
    properties.put("mail.user", "xxxxxxxxx@qq");
            // 此处的密码就是前面说的16位STMP授权码
    properties.put("mail.password", "xxxxxxxxxxxxxxxx");
            this.mailHost = Property("mail.smtp.host");
            this.mailAuth = Property("mail.smtp.auth");
            this.mailPort = Property("mail.smtp.port");
            this.sender_username = Property("mail.user");
            this.sender_password = Property("mail.password");
        } catch (Exception e) {
            e.printStackTrace();
        }
    // 构建授权信息,用于进行SMTP进行身份验证
        Authenticator authenticator = new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                // 用户名、密码
                String userName = Property("mail.user");
                String password = Property("mail.password");
                return new PasswordAuthentication(userName, password);
            }
        };
        session = Instance(properties,authenticator);  //用户验证
        message = new MimeMessage(session);  //将验证成功的session信息,创建一个message 对象。
    }
    /**
    * 发送邮件
    * @param subject
    * 邮件主题
    * @param sendHtml
    * 邮件内容
    * @param receiveUser
    *  收件人地址
    * @param file
    * 附件
    */
    public int doSendHtmlEmail(String subject, String sendHtml, String receiveUser, Vector file) {
            try {
                // 发件人
                InternetAddress from = new InternetAddress(sender_username);
                message.setFrom(from);       
                // 收件人
                InternetAddress to = new InternetAddress(receiveUser);
                message.setRecipient(Message.RecipientType.TO, to);
                // 邮件主题
                message.setSubject(subject);
                // 向multipart对象中添加邮件的各个部分内容,包括文本内容带图片和附件
                BodyPart contentPart = new MimeBodyPart();
                Multipart multipart = new MimeMultipart("related");  //用于来关联文本内容中图片。
                // 添加邮件正文
                String imgaeString=Qh_method.randNumID("qunhong_");  //生成一个随机数,
大家可以自己写
                multipart.addBodyPart(contentPart);
//利用正则出图片中的src改成cid
final Pattern imgRegExp  = Patternpile( "<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>" );
              Map<String, String> inlineImage = new HashMap<String, String>();
              final Matcher matcher = imgRegExp.matcher( sendHtml );
              int i = 0;
              while ( matcher.find() ) {
                  String src = up();
                  if ( sendHtml.indexOf( src ) != -1 ) {
                    String srcToken = "src=\"";
                    int x = src.indexOf( srcToken );
                    int y = src.indexOf( "\"", x + srcToken.length() );
                    String srcText = src.substring( x + srcToken.length(), y );
                    String Sub = srcText.substring(srcText.indexOf("."),srcText.length());
                    String cid = imgaeString + i;
                    String newSrc = place( srcText, "cid:" + cid +Sub);
                    inlineImage.put( cid, srcText.split( "," )[0] );
                    sendHtml = place( src, newSrc );
                    i++;
qq怎么发邮件                  }
              }
            //这里说明一下为什么要将正文里的图片转为cid,个人理解:附件和正文里的图片都归于附件传输,设置cid用于识别附件是否为正文底下图片。
//修改后正文内容放置contentPart           
  contentPart.setContent(sendHtml, "text/html;charset=UTF-8");
    //获取项目路径,来获得正文底下的图片,上传至服务器。
    String path = Class().getProtectionDomain().getCodeSource().getLocation().getFile();