XMLRPC is message (XML) based and you can not use object at all. The advantage is security and reliability. With XML you can encrypt and validate any way you like. SOAP is XMLRPC on HTTP by XML message
一.é‚®äšgçš„å‘é€?br /> ½W¬ä¸€ä»¶è¦çŸ¥é“的事情是,ä½ çš„SMTPæœåŠ¡å™¨çš„ä¸ÀLœºå?它负责将您的邮äšgå‘é€åˆ°å¤–部世界的机å™?一般æ¥è¯´è¿™äº›æœåŠ¡å™¨éƒ½ç¬¦åˆå‘½åä¹ æƒ?比如,å¦‚æžœä½ çš„é‚®ç®±æ˜?a href="mailto:acmilan@sina.com.cn">acmilan@sina.com.cn,那么SMTPæœåŠ¡å™¨çš„ä¸ÀLœºå则是smtp.sina.com.cn;å¦å¤–也å¯ä»¥å‚考å„大网站自å·Þqš„说明.ä¸ÞZº†æ–¹ä¾¿,下文ä¸ä»¥¾|‘易邮箱ä¸ÞZ¾‹.
 JavaMail使用了Session¾cÈš„概念æ¥ä¿å˜è¯¸å¦‚SMTPä¸ÀLœºå’Œè®¤è¯çš„ä¿¡æ¯åQŒä¸»è¦æƒ³æ³•是åŸÞZºŽä¼šè¯åQˆSessionsåQ‰åœ¨Java虚拟æœÞZ¸å¯ä»¥è¢«é𔼛»ï¼Œ˜q™å¯ä»¥é˜»æ¢æ¶æ„代ç 窃å–其他用户在其他会è¯ä¸çš„ä¿¡æ¯åQŒè¿™äº›ä¿¡æ¯å¯èƒ½åŒ…括用户å和密ç ç‰è®¤è¯ä¿¡æ¯.ä½ æ‰€è¦å‘é€çš„é‚®äšgž®†ä¿å˜åœ¨ä¸€ä¸ªMessage对象ä¸?而这个Message对象则是ç”׃½ æ‰€æž„é€ çš„session实例æ¥åˆ›å»?br /> è¦å¾—åˆîC¸€ä¸ªç‰¹å®šçš„session对象,å¯ä»¥é€šè¿‡ä¸€ä¸‹ä»£ç ?
     //讄¡½®session的属æ€?br />     Properties pro = new Properties();
     pro.put("mail.transport.protocol", "smtp");
     pro.put("mail.smtp.auth", "true");
     pro.put("mail.smtp.host", "smtp.126.com");
     pro.put("mail.host", "126.com");
    Â
     //讄¡½®è®¤è¯å™?br />     PopupAuthenticator pop = new PopupAuthenticator();
     pop.performCheck("My Name", "My Password");//ä½ çš„å¸æˆ·å’Œå¯†ç ?br />    Â
     //得到session
     Session mailSession = Session.getInstance(pro, pop);
Â è¦æ³¨æ„çš„æ˜?ä¸ÞZº†é¿å…垃圾邮äšg,大多数的smtpæœåŠ¡å™¨éœ€è¦è®¤è¯?SMTP认è¯(SMTP AUTH)需è¦ç”¨æˆ·åå’Œå¯†ç æ¥å‘é€é‚®ä»?å› æ¤,必须在sessionçš„åˆå§‹åŒ–傿•°ä¸è®¾¾|®ä¸€ä¸ªè®¤è¯è€…(AuthenticatoråQ‰æ¥˜q”回所需的认è¯è¯ä¹?具体代ç å¿…é¡»ç”Þp‡ªå·±æ¥å®žçް:
    class PopupAuthenticator extends Authenticator {
      String username = null;
      String password = null;
      public PopupAuthenticator() {}
      public PasswordAuthentication performCheck(String user, String pass) {
        username = user;
        password = pass;
        return getPasswordAuthentication();
       }
      protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password);
       }
     }
 接ç€,ž®±å¯ä»¥ç”¨ä¹‹å‰å¾—到的sessionæ¥æž„é€ Message对象:
   Message msg = new MimeMessage(mailSession);Â
 在ä‹É用会è¯åˆ›å»ÞZº†ä¸€ä¸ªMimeMessageå?æˆ‘ä»¬éœ€è¦æ¥å¡«å……˜q™ä¸ªæ¶ˆæ¯.首先是设¾|®è¡¨å¤´ä¿¡æ?Message¾cÕd®šä¹‰äº†é‚®äšg¾pÈ»Ÿä¸ä‹É用的属æ€?ç”±åå?值对¾l„æˆ,使用˜q™äº›åå—-值å¯ä»¥æŒ‡å®šé‚®ä»¶è¡¨å¤´ä¿¡æ?Javamailæä¾›äº†ä¸€¾pÕdˆ—api用于讄¡½®å¸¸è§çš„邮件表å¤?å…¶ä¸åœ¨æ¶‰åŠåœ°å€çš„æ“ä½œæ—¶,我们用InternetAddressæ¥è¿›è¡Œå°è£?
     msg.setFrom(new InternetAddress ("acmilan@126.com");
     msg.setSubject("Hello");
     msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse("intermilan@126.com", false));
     msg.setText("I will beat u");
     msg.setSentDate(new Date());
     //å‘逿¶ˆæ?br />     Transport.send(msg);
 对Transport¾cÈš„调用ž®†ä¼šåŽÀLŸ¥æ‰ùN€‚当的会è¯ï¼Œòq¶æ‰¾å‡ºå¦‚何å‘逿¶ˆæ¯ï¼Œž®½ç®¡˜q™æ ·åšçœ‹ä¸ŠåŽ»æœ‰äº›ä¸ç›´è§‚。当我们完战q™ä¸€æ¥çš„æ—¶å€™ï¼Œæˆ‘们的邮件就已ç»å‘é€å‡ºåŽÖMº†ã€‚æ¤æ—Óž¼Œæˆ‘们˜q˜éœ€è¦æ·»åŠ ä»£ç æ¥æ•获三ç§JavaMailå¯èƒ½æŠ›å‡ºçš„异常,它们是AddressExceptionã€MessagingExceptionå’ŒUnsupportedEncodingException. 但这ž®±æ˜¯æœ€åŸºæœ¬çš„ä‹É用JavaMailå‘é€é‚®ä»¶çš„æ–ÒŽ³•ã€?br /> 有时候我们还需è¦ç»™é‚®äšgæ·ÕdР附äšg.å†å›žåˆîC¹‹å‰å¯¹Message的讨è®ÞZ¸,Messageå¯¹è±¡åŒæ ·å®šä¹‰äº†é‚®ä»¶çš„内容,它å¯ä»¥å®šä¹‰ä¸€ä¸ªæ¶ˆæ¯å†…å®?也å¯ä»¥å®šä¹‰å¤šä¸ªæ¶ˆæ¯å†…å®?消æ¯å†…容(通常指的是附ä»?都将由DataHandle下的¾cÀL¥å¤„ç†.Message对象由Multipart¾l„æˆ,一个Multipartå¯å«æœ‰å¤šä¸ªBodyPart,˜q™äº›BodyPartž®†ç”¨æ¥ä¿å˜æ–‡æœ¬ä¿¡æ¯å’Œé™„äšg.
     MimeMultipart multipart = new MimeMultipart();
     BodyPart msgBodyPart = new MimeBodyPart();//ç”¨æ¥æ”„¡½®æ–‡æœ¬å†…容
     msgBodyPart.setContent(message, "text/plain");
     BodyPart attBodyPart = new MimeBodyPart();//ç”¨æ¥æ”„¡½®é™„äšg
     DataSource ds = new FileDataSource(new File("c:/td.txt"));
     attBodyPart.setDataHandler(new DataHandler(ds));//讄¡½®DataHandler
     attBodyPart.setFileName("bsbs.txt");//附äšg的显½Cºåå?br />     multipart.addBodyPart(msgBodyPart);
     multipart.addBodyPart(attBodyPart);
     msg.setContent(multipart);
     Transport.send(msg);
  最å?我们æ¥çœ‹çœ‹å¦‚何å‘é€HTMLæ ¼å¼çš„é‚®ä»?æ–‡æœ¬çš„æ ¼å¼å¿…™åÈ›¸åº”的讄¡½®ä¸ºtext/html,é‚®äšgä¸çš„囄¡‰‡ž®†ä»¥é™„äšgå½¢å¼åŠ è²,å¦å¤–˜q˜è¦æŒ‡å®šä¸€ä¸ªå†…部ID以供调用;
     MimeMultipart multipart = new MimeMultipart();
     BodyPart msgBodyPart = new MimeBodyPart();
     //讄¡½®æ ¼å¼ä¸?text/html"
     msgBodyPart.setContent("<H1>Hi! From HtmlJavaMail</H1> <img src=\"cid:logo\"/>", "text/html");
     BodyPart embedImage = new MimeBodyPart();
     DataSource ds = new URLDataSource(new URL("     embedImage.setDataHandler(new DataHandler(ds));
     //讄¡½®è¡¨å¤´çš„内部ID,注æ„,所讄¡½®å†…å®¹å¿…é¡»ä¸Žå‰æ–‡å¯¹åº?在æ¤å¤?剿–‡çš„å¼•ç”¨äØ“<img src=\"cid:logo\"/>,å› æ¤Content-ID表头对应
     //的应该是<logo>
     embedImage.setHeader("Content-ID", "<logo>");
     multipart.addBodyPart(msgBodyPart);
     multipart.addBodyPart(embedImage);
     msg.setContent(multipart);
  ˜q™æ ·,一ž®HTMLæ ¼å¼çš„邮件便完æˆäº?br />     Transport.send(msg);