Ó¢ÎÄÔÎÄ£ºhttp://www-106.ibm.com/developerworks/java/library/j-james1.html
ѧϰÕâ¸ö¿ªÔ´ÏîÄ¿µÄ»ù´¡ÖªÊ¶
¼¶±ð: Öм¶
Claude Duguay (claude.duguay@verizon.net)
Ê×ϯ¼Ü¹¹Ê¦, Arcessa, Inc.
6,10, 2003
Java ApacheÆóÒµ¼¶Óʼþ·þÎñÆ÷ -- ͨ³£±»³ÆÎªJames --ÊÇApache×éÖ¯¹¹½¨µÄÒ»¸ö¿ÉÒÆÖ²µÄ,°²È«µÄ,100% ´¿ Java ʵÏֵįóÒµ¼¶Óʼþ·þÎñÆ÷¡£µ«JamesÓÐDZÁ¦³ÉΪ¹¦ÄܸüÇ¿µÄÓ¦Ó÷þÎñÆ÷£¬ÕâµÃÒæÓÚËüµÄ×é¼þʽÌåϵ½á¹¹ºÍmailet»ù´¡ÉèÊ©¡£mailet¶Ôe-mailËùÆðµÄ×÷ÓÃÓë servlets¶ÔWeb·þÎñÆ÷µÄ×÷ÓÃÏàËÆ¡£E-mail ·þÎñÆ÷ÔÚ×îÖÕ·¢Õ¹³ÉΪInternetµÄDARPA³öÏÖµÄÔçÆÚ¾ÍÒѾºÜÆÕ±éÁË¡£µ« James ΪÕâ¸ö¾³£±»³ÆÎªInternet×î¹Ø¼üµÄÓ¦ÓÃÌṩÁËеĿÉÄÜÐÔ¡£
ÕâÊÇ̽Ë÷JamesµÄÁ½ÆªÎÄÕÂÖеĵÚһƪ. ÕâÆªÎÄÕÂÌṩÁËJamesµÄ¸ÅÊöºÍ̽ÌÖËüµÄ¿ÉÄÜÐÔµÄÖ¸µ¼ÐÔ·½Ïò¡£ÔÚµÚ¶þƪÎÄÕÂÖУ¬ÎÒÃÇ»áʵÏÖÒ»¸ömailetÓ¦ÓóÌÐòÀ´¹ÜÀí²»ÄÜ·¢ËÍ£¨unavailability£©µÄÏûÏ¢¡£Ä㽫»á·¢ÏÖ£¬ÎªJamesдӦÓóÌÐò¼òÖ±¼òµ¥µÄÁîÈËÄÑÒÔÖÃÐÅ¡£ÔÚÕâ¸öÊÀ½çÉÏÿÌì¶¼Óм¸°ÙÍòÈËÔÚÓà E-mail £¬Òò´ËÆäÓ¦ÓõĿÉÄÜÐÔÒ²Ô¶Ô¶³¬³öÁËÕâ¸öϵÁÐËù½éÉܵĴ¦Àí·½·¨¡£ÎÞÂÛÈçºÎ£¬ÎÒ¶¼Ï£ÍûÕâÆªÎÄÕ¿ÉÒÔ×÷Ϊһ¸ö»ù´¡ÎªÄã·þÎñ£¬°ïÄ㿪ʼÏëÏñ¸÷ÖÖ¿ÉÄÜÐÔ¡£
E-mail ÈçºÎ¹¤×÷
ÔÔòÉÏÀ´½²£¬E-mailÊǼòµ¥µÄ¡£Äã¿ÉÒÔÓÃÒ»¸öÓʼþÓû§´úÀí£¨mail user agent£MUA£©´´½¨´øÓÐÒ»¸ö»ò¼¸¸ö½ÓÊÕÕßµØÖ·µÄÏûÏ¢¡£ÓкܶàÖÖÐÎʽµÄ MUAs ¿É¹©Ñ¡Ôñ£¬°üÀ¨»ùÓÚÎı¾µÄ¡¢»ùÓÚWebµÄ¡¢»¹ÓÐGUIÓ¦ÓóÌÐò¡£Microsoft Outlook ºÍ Netscape Messenger ÊôÓÚ×îºóÒ»ÖÖ¡£Ã¿¸öe-mail ¿Í»§¶Ë¶¼±»ÅäÖÃΪÏòÒ»¸öÓʼþ´«Êä´úÀí£¨mail transfer agent ££MTA£©·¢ËÍÓʼþºÍ´ÓÒ»¸öMTA»ñÈ¡·¢¸øÄ³¸öÓû§µØÖ·µÄe-mailÏûÏ¢¡£ÒªÏëÕâÑù×ö£¬ ÄãÐèÒªÔÚÓʼþ·þÎñÆ÷£¨¼¼ÊõÉϽ²£¬ÊÇMTA£©ÉÏÓÐÒ»¸öe-mail Õ˺Š£¬²¢ÇÒÄãÄܹ»Ê¹Óñê×¼µÄIneternetÐÒ飬ÎÞÂÛÊÇÍÑÏß´¦Àí e-mail £¨ÓÃPOP3£©»¹ÊÇ°Ñ e-mail ÁôÔÚ·þÎñÆ÷ÉÏ£¨ÓÃIMAP£©¡£ÔÚ¿Í»§¶ËºÍMTAÖ®¼äÒÔ¼°MTAºÍMTAÖ®¼ä·¢ËÍÓʼþµÄÐÒé¶¼ÊǼòµ¥Óʼþ´«ÊäÐÒ飨Simple Mail Transfer Protocol£SMTP£©¡£
Building a James application
Õâ¸öϵÁеĵڶþ²¿·ÖÔÚÄãÁ˽âJames»ù´¡ÉèÊ©µÄ»ù´¡ÉÏʵÏÖÒ»¸öʵ¼ÊµÄÓ¦ÓóÌÐò.
ÔÚMTAÖ®¼ä¾¿¾¹·¢ÉúÁËʲôÊÂÇé½ö½öÉÔ΢ÓÐȤһµã¡£ E-mail·þÎñÆ÷Ôںܴó³Ì¶ÈÉÏÒÀÀµÓÚDNS ºÍ±»³ÆÎªÓʼþ´«Ê䣨 mail transfer »ò MX£©¼Ç¼µÄe-mail-specific ¼Ç¼¡£MX¼Ç¼ÓëÓÃÀ´½âÎöURLµÄDNS¼Ç¼ÉÔÓв»Í¬£¬ Ëü»¹°üº¬ÁËһЩ¶îÍâµÄÓÅÏȼ¶ÐÅÏ¢À´¸ü¸ßЧµÄ·ÓÉÓʼþ¡£ÎÒ²»ÔÚÕâÀïÉîÈëÑо¿ÕâЩϸ½Ú £¬µ«Ã÷°×DNSÊdzɹ¦ÓÐЧµÄ·ÓÉe-mailµÄ¹Ø¼üºÜÖØÒª¡£ James ÊÇÒ»¸ö MTA, ͬʱJavaMail API ÌṩÁËÒ»¸ö MUAµÄ¿ò¼Ü¡£ÔÚÕâÆªÎÄÕÂÀÎÒÃǽ«ÓÃJavaMail À´ÎªÎÒÃǵÄJames °²×°×öÒ»´Î²âÊÔ¡£ÔÚÕâ¸öϵÁеĵڶþƪÎÄÕÂÀÎÒÃǽ«ÓÃJames Mailet APIÀ´ËµÃ÷ÈçºÎ¿ª·¢Äã×Ô¼ºµÄJamesÓ¦ÓóÌÐò¡£
James µÄÉè¼ÆÄ¿±ê
JamesµÄÉè¼ÆÒªÂú×ãÌØ¶¨µÄÄ¿±ê¡£ÀýÈ磬ËüÍêÈ«ÓÃJavaÓïÑÔ±àÂëÒÔÂú×ã×î´ó»¯¿ÉÒÆÖ²ÄÜÁ¦µÄÄ¿±ê¡£Ëü¼´ÌṩÁ˱£»¤×ÔÉí·þÎñÆ÷»·¾³µÄһЩ°²È«ÌØÐÔÒ²ÌṩÁ˰²È«ÒÔʵÏÖ°²È«µÄÄ¿±ê¡£ James Ëù¾ßÓеĶàÏß³ÌÓ¦ÓóÌÐòµÄ¹¦ÄÜÀûÓÃÁ˺ܶàAvalon¿ò¼ÜÌṩµÄºÃ´¦¡£ (Avalon ÊÇÒ»¸öApache Jakarta ÏîÄ¿£¬ ÌåÏÖÁËPhoenix¸ßÐÔÄÜ·þÎñÆ÷»ù´¡ÉèÊ©µÄÒ»Ð©ÌØÐÔ¡£Á˽â Avalon¶ÔÓÚ¿ª·¢JamesÓ¦ÓóÌÐòÊÇÓÐÒæµ«²»±ØÒªµÄ¡£Çë¿´ ×ÊÔ´ ²¿·ÖÉîÈëѧϰAvalon.)
JamesÌṩÁËÒ»×éÈ«ÃæµÄ·þÎñ£¬°üÀ¨Ò»Ð©½ö½öÔڸ߶˵ĻòºÜºÃµÄÓʼþ·þÎñÆ÷ÖвÅÄܵõ½µÄ¡£ÕâЩ·þÎñÖ÷ÒªÊÇÓÃMatcher ºÍ Mailet APIsʵÏֵģ¬ËüÃǺÏ×÷Ìṩe-mailµÄ¼ì²âºÍ´¦ÀíÄÜÁ¦¡£JamesÖ§³Ö±ê×¼µÄe-mailÐÒ飨SMTP, POP3, IMAP£©£¬ºÍһЩÆäËûµÄÐÒé¡£James²ÉÓÃËÉÉ¢ñîºÏµÄǶÈëʽÉè¼ÆÒÔ±£Ö¤ÏûÏ¢¿ò¼ÜÓëÐÒéÎ޹ء£ÕâÊÇÒ»¸öºÜºÃµÄÖ÷Ò⣬½«À´¿ÉÒÔÈÃJamesÏñ´ó¶àÊýÏûÏ¢·þÎñÆ÷Ò»Ñù»òÕßÖ§³ÖÖîÈ缴ʱÏûÏ¢ÄÇÑùµÄÏûÏ¢ÐÒé¡£
Éè¼Æ×é×îºóÌá³öµÄÒ²ÊÇ×îÓÐȤµÄÄ¿±êÊÇmailetsµÄ¸ÅÄËüΪ¿ª·¢e-mailÓ¦ÓóÌÐòÌṩÁËÒ»¸ö»ùÓÚ×é¼þÉúÃüÖÜÆÚºÍÈÝÆ÷µÄ½â¾ö·½°¸¡£ÎãÓ¹ÖÃÒÉ£¬×ÜÊÇÓпÉÄÜ»áÓõ½ÆäËûµÄMTA£¬±ÈÈç Sendmail¡£Èç¹ûÄãÏëµ÷ÓÃÆäËûµÄMTA£¬ÄÇôÄãÓ¦¸ÃÄܹ»µ÷ÓÃÈκγÌÐò£¬²¢ÇÒ¿ÉÒÔ²Ù×÷ͨ¹ýµÄÊý¾Ý¡£ µ«JamesÌṩÁËÒ»¸öͨÓõġ¢¼òµ¥µÄAPIʵÏÖÕâЩĿ±ê£¬²¢ÇÒʹÈÎÎñ¸üÈÝÒ×Íê³É¡£¸ÐлJamesÌṩµÄÄÇЩÎÒÃÇ¿ÉÒÔ²Ù×÷µÄ¶ÔÏó£¬ÎÒÃÇ»áÔÚÕâÆªÎÄÕÂÖÐÉîÈëÑо¿Matcher ºÍ Mailet APIs¡£
°²×°²¢ÅäÖÃJames
James¿ÉÒÔ´ÓËüÔÚApache»ù½ð»áÕ¾µãÖеÄÖ÷Ò³(²Î¼û×ÊÔ´ ÌṩµÄÁ´½Ó).ÉÏ»ñÈ¡£¬ÄãÓ¦¸ÃÏÂÔØ×îз¢²¼µÄ²úÆ·¿ªÊ¼¹¤×÷£»ÔÚдÕâÆªÎÄÕµÄʱºòÊǰ汾2.1.2¡£Äã¿ÉÒÔÔÚJamesÖ÷Ò³×ó±ßµÄµ¼º½À¸ÀïÑ¡Ôñ Downloads > Binaries ½øÈëÏÂÔØÇø¡£ÔÚÏÂÔØÇø£¬ÕÒµ½Release Builds ²¿·Ö²¢ÇÒÑ¡ÔñJames 2.1Á´½Ó£¬¸ù¾ÝÄã¸öÈ˵ÄϲºÃÑ¡ÔñÏÂÔØjames-2.1.2.tar.gz »òÕßjames-2.1.2.zipÎļþ¡£
ÎÒÃÇ»¹ÒªÓÃJavaMail API²âÊÔÎÒÃǵÄÓ¦Óã¬ËùÒÔÄ㻹ÐèÒªÏÂÔØËü (²Î¼û ×ÊÔ´)¡£ÏÖÔÚÄܵõ½ÊÇ1.3°æ±¾£¬ÎļþÃûÊÇ javamail-1_3.zip¡£µ±Äãµ½JavaMailµÄÖ÷Ò³ÉÏʱ£¬Äã»á×¢Òâµ½Óе½JavaBeans Activation Framework (JAF)µÄÁ´½Ó£¬ËüÊÇJavaMail API ÐèÒªµÄ¡£ (²Î¼û ×ÊÔ´ Ö±½ÓÁ´½Óµ½JAF.) JAF ÏÖÔڵķ¢²¼°æ±¾ÊÇ 1.0.2 £¬ÎļþÃûÊÇjaf-1_0_2.zip¡£Ò»µ©ÄãµÃµ½ÁËËùÓÐÕâЩÎļþ£¬Äã¾ÍÄܹ»¼ÜÆðÓëJamesÒ»Æð¹¤×÷µÄϵͳÁË¡£
We'll set up a directory structure with all the elements we need for development.ÎÒÃÇ»áΪ¿ª·¢Óõ½µÄËùÓÐÔªËØÉèÁ¢Ò»¸öĿ¼½á¹¹¡£ ÔÚ²úÆ·ÖУ¬ÕâÖÖÉèÁ¢±ØÐëÓÐËù²»Í¬£¬ÎļþµÄ°²ÅÅÒª×ۺϿ¼Âǰ²È«ÐԺ͹¦ÄÜÐÔÁ½·½ÃæµÄÎÊÌâ¡£±ÈÈç˵£¬ÎªÁËʵÏÖÎÒÃǵÄÄ¿±ê£¬¿ÉÒÔÔÚ±¾µØÖ÷»úÉϹ¤×÷£¬µ«¶ÔÓÚÒ»¸öÕæÕýµÄe-mail·þÎñÆ÷µÄ²¿Êð¹¤×÷À´Ëµ£¬±¾µØÖ÷»ú²¢²»ÊÇÒ»¸ö¿ÉÐеı¸Ñ¡·½°¸¡£Èç¹ûÄãҪΪÉÌÒµÓ¦ÓðÑJames·þÎñÆ÷²¿ÊðΪһ¸öÖ÷MTA»òÓëSedmailÒ»Æð¹¤×÷£¬ÕâÀïÓдóÁ¿µÄÅäÖÃÎĵµºÍÌṩ°ïÖúµÄÓʼþÁÐ±í¡£
µ±ËùÓÐÎļþ¶¼½âѹµ½JamesĿ¼Ïºó, ÎÒÃǵÄĿ¼²ã´Î½á¹¹½«ÈçÁбí1Ëùʾ¡£ÎÒÒÑ¾ÒÆ×ßÁË javadoc, src,ºÍJavaMail webapp demo Ŀ¼ÏµÄһЩ×ÓĿ¼£¬ÒÔ±ãÎÒÃǵÄĿ¼¸ü½ô´ÕºÍÒ×ÓÚÏëÏñ¡£
Áбí1. James, JavaMail, ºÍ JAF Ŀ¼
================================================================================
James
+---jaf-1.0.2
| +---demo
| \---docs
| \---javadocs
+---james-2.1.2
| +---apps
| +---bin
| | \---lib
| +---conf
| +---docs
| | +---images
| | \---stylesheets
| +---ext
| +---lib
| +---logs
\---javamail-1.3
+---demo
| +---client
| +---servlet
| \---webapp
+---docs
| \---javadocs
\---lib
===============================================================================
ÎÒ¼ÙÉèÄãÒѾ°²×°Á˶ÀÁ¢ÓÚJamesÎļþµÄJava ƽ̨µÄ1.4°æ±¾¡£JamesÅäÖÃÎļþÉù³ÆÔÚʹÓÃJava 1.3.0ʱÒѾ·¢ÏÖÁËһЩÎÊÌ⣬ËùÒÔÄãÓ¦¸ÃʹÓÃ1.3.1»ò¸ü¸ßµÄ°æ±¾¡£ÔÔòÉÏÀ´Ëµ£¬JamesÓ¦¸Ã¿ÉÒÔÔÚÓëJava 1.4 VM¼æÈݵÄÈÎºÎÆ½Ì¨ÉϺܺõÄÔËת¡£
ÎÒÃǵĵÚÒ»²½ÊÇÆô¶¯James, ÒòΪֻÓзþÎñÆ÷±»ÔËÐйýÒ»´ÎÒÔºóÅäÖÃÎļþ²Å»á±»ÊͷųöÀ´¡£Äã»áÔÚ james-2.1.2/binĿ¼Ï·¢ÏÖÒ»¸öÔËÐнű¾ (¸ù¾ÝÄãµÄ²Ù×÷ϵͳʹÓÃrun.bat »ò run.sh) ¡£µ±ÄãÔËÐÐÕâ¸ö½Å±¾ºó£¬Êä³öÓ¦¸ÃºÍÁбí 2ÏàËÆ £¨ÕâÊÇÔÚWindowsϵͳϵÄÊä³öÑù±¾)£º
Áбí2. JamesÔËÐÐʱµÄ¿ØÖÆÌ¨Êä³ö
================================================================================
Using PHOENIX_HOME: D:\James\james-2.1.2
Using PHOENIX_TMPDIR: D:\James\james-2.1.2\temp
Using JAVA_HOME: c:\programming\java14
Phoenix 4.0.1
James 2.1.2
Remote Manager Service started plain:4555
POP3 Service started plain:110
SMTP Service started plain:25
NNTP Service started plain:119
Fetch POP Disabled
================================================================================
Äã¿ÉÒÔ°´ Ctrl+C Í˳ö³ÌÐò£¬ Phoenix ÈÝÆ÷»á·¢³öÒ»¸öÏûÏ¢¸æËßÄãËüÕýÔÚÍ˳ö¡£ÑϸñµÄ½²£¬ÕýÈ·µÄÍ˳öJamesµÄ·½·¨ÊÇʹÓÃÔ¶³Ì¹ÜÀí½çÃæ¡£ÎÒÔÚÎҵĿª·¢»·¾³ÀïÒѾÓùýCtrl+C£¬Ã»Óз¢ÏÖ¸ºÃæµÄÓ°Ïì¡£µ«ÎÞÂÛÈçºÎ£¬ÔÚ¿ª·¢»·¾³Àï×ÜÊÇÓ¦¸ÃʹÓÃshutdownÃüÁî¡£
ÔÚµÚÒ»´Î¹Ø±ÕÁËJamesÖ®ºó£¬Äã¾Í»áÔÚjames-2.1-2/apps/james/SAR-INFÎļþ¼ÐÏÂÃæ·¢ÏÖconfig.xmlÎļþ£¬ÄãÓ¦¸ÃÈÏÕæ¿´Ò»ÏÂÕâ¸öÎļþ¡£Í¨³£ÄãÓ¦¸Ã×öµÄµÚÒ»¼þÊÂÊǸıä¹ÜÀíÔ±Õ˺ţ¬Ä¬ÈÏÉèÖÃΪroot£¬ÃÜÂëÊÇroot¡£ÓÉÓÚÊǽøÐпª·¢£¬ËùÒÔÎÒÃDz»¹ÜËü£¬µ«ºÜÃ÷ÏÔÔÚÉú²úϵͳÖб£ÁôÕâÖÖÅäÖÃÊǺܲ»Ã÷Öǵġ£½ÓÏÂÀ´Òª¸Ä±äµÄͨ³£ÊÇDNS·þÎñÆ÷µÄµØÖ·£¬Èç¹ûJamesÊÇÍêÈ«×÷Ϊһ¸öe-mail·þÎñÆ÷ÔËתµÄ»°£¬ÕâÊǷdz£±ØÒªµÄ¡£¼ÈÈ»ÎÒÃÇËùÓеIJâÊÔ¶¼ÊÇÔÚ±¾»úÉϽøÐеģ¬ÎÒÃÇÒ²²»È¥¹ÜËü¡£ µ«ÄãÓ¦¸ÃÒâʶµ½ÕâÊǸöºÜÖØÒªµÄÉèÖá£ËäÈ»Àí½âÅäÖÃÎļþºÜÖØÒª£¬µ«¶ÔÓÚÎÒÃǵĿª·¢Ä¿±êÀ´Ëµ£¬ÆäÓàµÄĬÈÏÉèÖö¼Ã»ÓÐÎÊÌâ¡£Äã¿ÉÒÔÔÚ james-2.1.2/docsĿ¼Ïµõ½¸üÏêϸµÄÐÅÏ¢¡£
ÈÃÎÒÃÇÔÚ¿ªÊ¼¹¤×÷֮ǰÏÈÌí¼Ó¼¸¸öÓû§¡£Ê×ÏÈÓÃÃüÁî¡°telnet localhost 4555¡± telnetµ½±¾»úµÄ4555¶Ë¿Ú¡£¿ÉÒÔÓÃrootÕâ¸öÓû§ÃûºÍÃÜÂëµÇ¼£¬µÇ¼³É¹¦Ö®ºó£¬ÎÒÃǾͿÉÒÔÌí¼ÓÓû§ÁË¡£¡°adduser¡± ÃüÁîÐèÒªÓû§ÃûºÍÃÜÂëÁ½¸ö²ÎÊý¡£ÔÚÕâ¸öÏîÄ¿ÖÐÎÒÃÇ»áÌí¼ÓÓû§ÃûΪred¡¢ greenºÍ blueµÄÈý¸öÓû§£¬ÃÜÂë¶¼ºÍÓû§ÃûÏàͬ¡£ (ÎÒÏàÐÅÄãÖªµÀÕâÔÚ´´½¨ÕæÊµÓû§µÄʱºò²»ÊÇÒ»¸öºÃÖ÷Ò⣬µ«ÕâÑùºÜÈÝÒ×ÅäÖÃÎÒÃǵIJâÊÔÓÃÀý¡£) Ìí¼ÓÓû§Ö®ºó£¬Äã¿ÉÒÔÓá±listusers¡° ÃüÁîÑéÖ¤ÊäÈëÊÇ·ñÕýÈ·£¬È»ºó¼üÈ롱quit¡°ÃüÁîÍ˳öÔ¶³Ì¹ÜÀí¡£Õû¸ö»á»°ÈçÁбí3Ëùʾ£¬ºìÉ«µÄÎı¾±íʾÄã×Ô¼º¼üÈëµÄÃüÁî¡£(¿Éϧ¿´²»µ½ºìÉ«ÁË£¬:( )
Áбí3. ÓÃÔ¶³Ì¹ÜÀíÌí¼ÓÓû§
===============================================================================
JAMES Remote Administration Tool 2.1.2
Please enter your login and password
Login id:
root
Password:
root
Welcome root. HELP for a list of commands
adduser red red
User red added
adduser green green
User green added
adduser blue blue
User blue added
listusers
Existing accounts 3
user: blue
user: green
user: red
quit
Bye
================================================================================
ÏÖÔÚÎÒÃǺÍÔËÐÐÆðÀ´µÄJames·þÎñÆ÷Ò»Æð´ó¸ÉÒ»³¡ÁË¡£ÈçÄãËù¼û£¬JamesµÄ²¿ÊðºÍÓÃÔ¶³Ì¹ÜÀí½øÐÐÅäÖÃÊÇÏ൱¼òµ¥µÄ¡£ºÜÃ÷ÏÔ£¬Èç¹ûÏëÈÃÓʼþ·þÎñÆ÷°²È«µÄ»°Ä㽫ÐèÒª¸Ä±ä¼¸¸öÅäÖòÎÊý£¬µ«ÄDz¢²»ÊÇÒ»¸öºÜ¸´ÔӵĹý³Ì¡£ ʹÓÃÓʼþ·þÎñÆ÷ÕæÕý¹Ø¼üµÄÊÇÔÚ¶àÓû§¶à·þÎñ»·¾³ÖÐÕýÈ·µÄÅäÖÃDNS¡£Õⳬ³öÁ˱¾ÎĵÄÌÖÂÛ·¶Î§£¬µ«ËüÒ²²»ÊǺܸ´ÔӵĹý³Ì¡£
ÓÃJavaMail²âÊÔJames
ΪÁËÈ·±£ÎÒÃǵݲװÊdzɹ¦µÄ, ÎÒÃǽ«ºÜ¿ìµÄ±àдÄܹ»·¢ËÍÏûÏ¢ºÍÏÔʾÊÕ¼þ¼ÐÖеÄÄÚÈÝÁбíµÄÁ½¸öÀ࣬ÓÃÀ´Ä£ÄâµäÐ͵Äe-mail¿Í»§¶ËµÄ»ù±¾¹¦ÄÜ¡£we'll write a quick pair of classes that will send messages and list inbox content, simulating the base functionality of a typical e-mail client. ÎÒÃÇÓÃÁ½¸öÀàÊÇÒòΪ MailClient À࣬ÈçÁбí4Ëùʾ,Äܹ»ÖØÓÃÒÔ²âÊÔ¸ü¸´ÔÓµÄÐÐΪ£¬ÎÒÃÇÔÚ¿ª·¢×Ô¼ºµÄJamesÓ¦ÓóÌÐòʱ£¨±¾ÏµÁеĵڶþƪÎÄÕ£©½«»áÖØÓÃÕâ¸öÀà¡£
Áбí4. MailClient: Ä£ÄâÒ»¸öe-mail ¿Í»§¶ËµÄ»ù±¾¹¦ÄÜ
£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½
import java.io.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
public class MailClient
extends Authenticator
{
public static final int SHOW_MESSAGES = 1;
public static final int CLEAR_MESSAGES = 2;
public static final int SHOW_AND_CLEAR =
SHOW_MESSAGES + CLEAR_MESSAGES;
protected String from;
protected Session session;
protected PasswordAuthentication authentication;
public MailClient(String user, String host)
{
this(user, host, false);
}
public MailClient(String user, String host, boolean debug)
{
from = user + '@' + host;
authentication = new PasswordAuthentication(user, user);
Properties props = new Properties();
props.put("mail.user", user);
props.put("mail.host", host);
props.put("mail.debug", debug ? "true" : "false");
props.put("mail.store.protocol", "pop3");
props.put("mail.transport.protocol", "smtp");
session = Session.getInstance(props, this);
}
public PasswordAuthentication getPasswordAuthentication()
{
return authentication;
}
public void sendMessage(
String to, String subject, String content)
throws MessagingException
{
System.out.println("SENDING message from " + from + " to " + to);
System.out.println();
MimeMessage msg = new MimeMessage(session);
msg.addRecipients(Message.RecipientType.TO, to);
msg.setSubject(subject);
msg.setText(content);
Transport.send(msg);
}
public void checkInbox(int mode)
throws MessagingException, IOException
{
if (mode == 0) return;
boolean show = (mode & SHOW_MESSAGES) > 0;
boolean clear = (mode & CLEAR_MESSAGES) > 0;
String action =
(show ? "Show" : "") +
(show && clear ? " and " : "") +
(clear ? "Clear" : "");
System.out.println(action + " INBOX for " + from);
Store store = session.getStore();
store.connect();
Folder root = store.getDefaultFolder();
Folder inbox = root.getFolder("inbox");
inbox.open(Folder.READ_WRITE);
Message[] msgs = inbox.getMessages();
if (msgs.length == 0 && show)
{
System.out.println("No messages in inbox");
}
for (int i = 0; i < msgs.length; i++)
{
MimeMessage msg = (MimeMessage)msgs[i];
if (show)
{
System.out.println(" From: " + msg.getFrom()[0]);
System.out.println(" Subject: " + msg.getSubject());
System.out.println(" Content: " + msg.getContent());
}
if (clear)
{
msg.setFlag(Flags.Flag.DELETED, true);
}
}
inbox.close(true);
store.close();
System.out.println();
}
}
£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½
Éè¼ÆMailClientµÄÖ÷ҪĿµÄÊÇÈÃÎÒÃÇ·¢ËÍÏûÏ¢£¬ÏÔʾ»òÕßɾ³ý¸ø¶¨Óû§ÔÚ·þÎñÆ÷ÉϵÄÏûÏ¢ÁÐ±í¡£ÎÒÒѾÉùÃ÷ÁËһЩÓÐÓõij£Á¿£¬ÈÃÎÒÃÇ ÏÔʾÏûÏ¢SHOW_MESSAGES,Çå³ýÏûÏ¢ CLEAR_MESSAGES, »òÕßÖ´ÐÐÕâÁ½ÖÖ²Ù×÷¡£ MailClientÀ໹ʵÏÖÁË Authenticator½Ó¿Ú£¬ÒÔ±ãÔÚ¼ìË÷ÓʼþʱµÄÔÚÏß´¦Àí¸üÈÝÒ×¹ÜÀí¡£
ÎÒ´´½¨ÁËÁ½¸ö¹¹Ô캯Êý£¬ÆäÖÐÒ»¸öÏÔʽµÄÉèÖÃJavaMailµÄµ÷ÊÔ±êÖ¾¡£ÔÚµ÷ÊÔ״̬Ï£¬³ÌÐò»á°Ñ¿Í»§¶Ë/·þÎñÆ÷µÄ½»»¥ÐÒéÊä³öµ½¿ØÖÆÌ¨£¬ÕâÑù¾ÍÄÜ¿´µ½·¢ÉúÁËʲô¡£ ¶ÌµÄ¹¹Ôì·½·¨²»´ò¿ªµ÷ÊÔ±êÖ¾£¬ÁíÍâÁ½¸ö²ÎÊýÊÇÓû§ÃûºÍÖ÷»ú£¬e-mailµØÖ·¿ÉÒÔÓÉÓû§ÃûºÍÖ÷»úµÃµ½¡£ÎÒÃÇ´´½¨ÁËÒ»¸öÔÚAuthenticator½Ó¿ÚÖж¨ÒåµÄ PasswordAuthentication ¶ÔÏó£¬Õâ¸ö¶ÔÏó¿ÉÒÔÓÉgetPasswordAuthentication()·½·¨»ñµÃ¡£
¹¹Ô캯ÊýµÄÆäÓà´úÂë´´½¨ÁËJavaMail propertiesÀ´±£´æËù˵Ã÷µÄÓû§ÃûºÍÖ÷»ú£¬²¢ÇÒÏÔʽµÄ˵Ã÷ÁËÎÒÃÇÒªÓõ½µÄÐÒé¡£Ò»µ©ÎÒÃǽ«ÕâЩֵ´æÈëProperties¶ÔÏó£¬ÎÒÃǾÍÄܵ÷Óþ²Ì¬µÄSession ·½·¨ getInstance() À´µÃµ½Ò»¸öÓÐЧµÄSession ÒýÓ㬠Ȼºó½«Ëü±£´æÔÚ¾Ö²¿±äÁ¿ÖÐ ¡£Ò»µ©¹¹Ô캯Êý±»ÓÃÓÚÖ¸¶¨µÄÓû§£¬ÎÒÃǾÍ×¼±¸ºÃÔÚÖ¸¶¨µÄe-mailÖ÷»úÉÏ·¢ËÍ»ò¼ìË÷ÄǸöÓû§µÄe-mail¡£
sendMessage() ·½·¨Í¬ÑùºÜ¼òµ¥¡£ËüÓÃÖ¸¶¨µÄ½ÓÊÕÕß¡¢Ö÷ÌâºÍÎı¾ÄÚÈÝ´´½¨ÁËÒ»¸ö MimeMessage ¶ÔÏó£¬È»ºóʹÓà JavaMailÖÐTransport ÀàµÄ¾²Ì¬·½·¨ send() ·¢ËÍÕâ¸öÏûÏ¢¡£ÎªÁË¿´Çå³þ·¢ÉúÁËʲô£¬ÎÒÃǰÑÕâ¸ö¹ý³ÌÒ²Êä³öµ½¿ØÖÆÌ¨¡£
checkInbox() ·½·¨×öµÄ¹¤×÷±È½Ï¶à£¬ÒòΪËüÒªÁгöÏûÏ¢ÁÐ±í£¬²¢¿ÉÒÔ¸ù¾ÝÑ¡Ôñɾ³ýËüÃÇ¡£method does more work because it needs to list messages and, optionally, erase them. Ò²¿ÉÒÔ²»²é¿´Ö±½Óɾ³ýÏûÏ¢£¬ÕâÈ¡¾öÓÚÄãÔÚmode²ÎÊýÖÐʹÓõıêÖ¾¡£It's also possible to just erase messages without looking at them, depending on the flags you use for the mode argument. ΪÁËʵ¼ÊµÃµ½ÏûÏ¢£¬ÎÒÃÇÐèҪͨ¹ýsession»ñµÃÒ»¸öStoreµÄÒýÓá£Á¬½Óµ½·þÎñÆ÷£¬È»ºó´ò¿ªÊÕ¼þÏäÎļþ¼Ð¡£ÎÒÃǵõ½Ò»¸öÎļþ¼ÐµÄÒýÓÃÖ®ºó£¬¾Í¿ÉÒÔÑ»·ÏÔʾ»òɾ³ýÏûÏ¢¡£
ÏÖÔÚÎÒÃÇÓÐÁË¿ÉÖØÓÃµÄ MailClient ´úÂ룬ÎÒÃÇ¿ÉÒÔΪ±¾»úÉϵÄJames·þÎñÆ÷±àдһ¸ö¿ìËٵIJâÊÔ´úÂëÁË¡£Áбí5ÖÐµÄ JamesConfigTest Àà´´½¨ÁË3¸öMailClientÀàµÄʵÀý£¬·Ö±ð´ú±íÎÒÃÇ´´½¨µÄÓû§ (red¡¢ greenºÍ blue). ÔÚÄãÖ´ÐÐÕâ¶Î´úÂë֮ǰ£¬È·±£ÄÇЩÓû§ÔÚe-mail·þÎñÆ÷ÉÏÊÇÓÐЧµÄ¡£
Áбí5. JamesConfigTest: James ·þÎñÆ÷µÄÒ»¸ö¿ìËÙ²âÊÔ
£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½
public class JamesConfigTest
{
public static void main(String[] args)
throws Exception
{
// CREATE CLIENT INSTANCES
MailClient redClient = new MailClient("red", "localhost");
MailClient greenClient = new MailClient("green", "localhost");
MailClient blueClient = new MailClient("blue", "localhost");
// CLEAR EVERYBODY'S INBOX
redClient.checkInbox(MailClient.CLEAR_MESSAGES);
greenClient.checkInbox(MailClient.CLEAR_MESSAGES);
blueClient.checkInbox(MailClient.CLEAR_MESSAGES);
Thread.sleep(500); // Let the server catch up
// SEND A COUPLE OF MESSAGES TO BLUE (FROM RED AND GREEN)
redClient.sendMessage(
"blue@localhost",
"Testing blue from red",
"This is a test message");
greenClient.sendMessage(
"blue@localhost",
"Testing blue from green",
"This is a test message");
Thread.sleep(500); // Let the server catch up
// LIST MESSAGES FOR BLUE (EXPECT MESSAGES FROM RED AND GREEN)
blueClient.checkInbox(MailClient.SHOW_AND_CLEAR);
}
}
£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½
´´½¨ÁË3¸öMailClient ʵÀýÖ®ºó, JamesConfigTest Ïȼòµ¥µÄÓà checkInbox()·½·¨ÒÔCLEAR_MESSAGES ģʽÇå³ýÿ¸öÓÊÏ䣬²¢Çҵȴý°ëÃëÒÔÈ·±£·þÎñÆ÷´¦ÀíÍêɾ³ý²Ù×÷¡£½Ó×Å·Ö±ð´ÓredºÍgreen·¢ËÍÒ»¸öÏûÏ¢µ½blue ¡£È»ºó¼ì²éblueÕ˺ÅÀïµÄÏûÏ¢¡£µ±ÄãÔËÐÐJamesConfigTestµÄʱºò£¬ÄãÓ¦¸Ã¿´µ½ÈçÁбí6µÄÊä³ö£º
Áбí6. JamesConfigTestÔËÐÐʱµÄÊä³ö
£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½
Clear INBOX for red@localhost
Clear INBOX for green@localhost
Clear INBOX for blue@localhost
SENDING message from red@localhost to blue@localhost
SENDING message from green@localhost to blue@localhost
Show and Clear INBOX for blue@localhost
From: green@localhost
Subject: Testing blue from green
Content: This is a test message
From: red@localhost
Subject: Testing blue from red
Content: This is a test message
£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½
Õâ±íÃ÷ÎÒÃǵÄJames°²×°Êdzɹ¦µÄ£»ÔÚ½øÐпª·¢Ö®Ç°ÄãÐèÒª°´ÕâÖÖ·½Ê½ÉèÖÃÄãµÄϵͳ¡£È»¶ø£¬ÎÒÃÇÔÚÕâ¸öϵÁеĵڶþ²¿·Ö֮ǰ²»»á̸ÂÛµ½¿ª·¢µÄÎÊÌâ¡£ÔÚÕâÆªÎÄÕµÄÊ£Óಿ·Ö£¬ÎÒÃǽ«Ñо¿Ò»ÏÂMatcherºÍMailet API£¬ÒÔ¼°ËæJames·¢²¼°æ±¾Ò»ÆðÌṩµÄÏֳɵį¥ÅäÆ÷ºÍmailets¡£ÎÒÃÇ»¹½«¿ìËÙä¯ÀÀÒ»ÏÂJamesÖ§³ÖµÄÆäËüÌØÐÔ¡£
Æ¥ÅäÆ÷
James×Ô´øÁËһЩ±ê×¼µÄÆ¥ÅäÆ÷£¨matchers£©¡£ËüÃÇÈ«¶¼ÊµÏÖÁËMatcher API£¬ÈçÁбí7Ëùʾ£¬²¢ÇÒÌṩÁËÏÖÓеÄMTAÒ»°ã¶¼ÓеŦÄÜ£¬»¹ÌṩÁËһЩʵÓõÄÀ©Õ¹¹¦ÄÜ¡£Õâ¸ö½Ó¿Ú·Ç³£¼òµ¥£»Ëü°üº¬ÁËÒ»¶ÔÉúÃüÖÜÆÚ·½·¨£¬init() ºÍ destroy() £¬»¹ÓÐÒ»¶Ô¼Ç¼·½·¨getMatcherInfo() ºÍ getMatcherConfig()£¬ÒÔ¼°Ò»¸öÖ÷·½·¨£¬match() £¬¶ÔMail¶ÔÏó½øÐвÙ×÷¡£MailÒýÓÃÌṩÁËÈÝÆ÷״̬µÄ·ÃÎÊ¡¢ÓʼþÏûÏ¢ºÍÒª½øÐвÙ×÷µÄÔªÊý¾Ý¡£
Áбí7. The Matcher ½Ó¿Ú
£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½
public interface Matcher
{
void init(MatcherConfig config);
void destroy();
String getMatcherInfo();
MatcherConfig getMatcherConfig();
Collection match(Mail mail);
}
£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½
Æ¥ÅäÆ÷µÄÈÎÎñÊÇʶ±ðÒ»×é½ÓÊÕÕߣ¬²¢·µ»ØÒ»¸ö´ú±íÒª±»mailet´¦ÀíµÄ½ÓÊÕÕßµÄ×Ö·û´®¶ÔÏ󼯺ϡ£Í¨¹ý½áºÏÆ¥ÅäÆ÷µÄʶ±ðÄÜÁ¦ºÍmailetµÄ´¦ÀíÄÜÁ¦£¬¿ÉÒÔ¿ª·¢³ö¸´ÔÓµÄe-mailÏûÏ¢´¦ÀíÓ¦ÓóÌÐò¡£
ËæJamesÒ»Æð·¢²¼µÄÆ¥ÅäÆ÷ʹÄãÎÞÐ迪·¢×Ô¼ºµÄÆ¥ÅäÆ÷¾ÍÄÜ×öһЩÊÂÇé¡£ÔÚ¾ö¶¨¿ªÊ¼¿ª·¢×Ô¼ºµÄÆ¥ÅäÆ÷֮ǰ×îºÃÏÈÁ˽âÒ»ÏÂÕâЩÒÑÓÐµÄÆ¥ÅäÆ÷¡£Í¨³£µÄÇé¿öÏ£¬ÄãÏë×öµÄ¹¤×÷¿ÉÄÜÒѾ°ïÄã×öºÃÁË¡£Äã¿ÉÒÔÔÚ±í¸ñ1Öп´µ½ÕâЩÒÑÓÐµÄÆ¥ÅäÆ÷£º
±í¸ñ 1. James×Ô´øµÄÆ¥ÅäÆ÷£¨matchers£©
Matcher Description
All Æ¥ÅäËùÓеÄe-mail²¢·µ»ØËùÓеĽÓÊÕÕß
HasHeader Æ¥Å京ÓÐÖ¸¶¨µÄÍ·ÐÅÏ¢µÄÏûÏ¢
HasAttachment Æ¥Åä´øÓи½¼þµÄÏûÏ¢
SubjectStartsWith Æ¥Åä±êÌâÒÔÖ¸¶¨µÄÎı¾¿ªÍ·µÄÏûÏ¢
SubjectIs Æ¥Å京ÓÐÖ¸¶¨µÄ±êÌâÏûÏ¢
HostIs Æ¥ÅäÀ´×ÔÖ¸¶¨µÄÖ÷»úµÄÏûÏ¢
HostIsLocal Æ¥Åä±¾»ú²úÉúµÄÏûÏ¢
UserIs Æ¥ÅäÖ¸¶¨µÄÓû§µÄÏûÏ¢
SenderIs Æ¥ÅäÖ¸¶¨µÄ·¢ËÍÕßµÄÏûÏ¢
SenderInFakeDomain Æ¥Åä·¢ËÍÕßµÄÖ÷»úµØÖ·²»ÄܽâÎöµÄÏûÏ¢
SizeGreaterThan Æ¥Åä±ÈÖ¸¶¨µÄÏÞÖÆ´óµÄÏûÏ¢
Recipients Æ¥Åä½ÓÊÕÕßÔÚÖ¸¶¨µÄÁбíÖеÄÏûÏ¢
RecipientsLocal Æ¥Åä½ÓÊÕÕßÔÚ±¾µØµÄÏûÏ¢
IsSingleRecipient Æ¥Åä½öÓÐÒ»¸ö½ÓÊÕÕßµÄÏûÏ¢
RemoteAddrInNetwork Æ¥ÅäÀ´×ÔÖ¸¶¨µÄIPµØÖ·¡¢ÓòµÈÁбíµÄÏûÏ¢
RemoteAddrNotInNetwork Æ¥Åä²»ÊÇÀ´×ÔÖ¸¶¨µÄIPµØÖ·¡¢ÓòµÈÁбíµÄÏûÏ¢
RelayLimit Æ¥Åäת·¢´ÎÊý´óÓÚÖ¸¶¨µÄ·þÎñÆ÷ÊýµÄÏûÏ¢¡£
InSpammerBlackList Óëmail-abuse.orgÌṩµÄÁбíÖеĵØÖ·Æ¥Åä
NESSpamCheck ²ÉÓõÃ×ÔNetscape Mail ServerµÄ·½·¨Æ¥ÅäÀ¬»øÓʼþ
HasHabeasWarrantMark ²ÉÓÃHabeas WarrantÆ¥ÅäÓʼþ
FetchedFrom ÓëFetchPOPMatchesËùÓÃµÄ X-fetched-from Í·ÐÅϢƥÅä
CommandForListserv Æ¥ÅäĿ¼·þÎñÆ÷µÄÃüÁî
ÕýÈçÄãÔÚ±íÖÐËù¿´µ½µÄ£¬Äã²»ÓñàдÈκÎеĴúÂë¾Í¿ÉÒÔÍê³ÉºÜ¶àÈÎÎñÁË£¬°üÀ¨ÖîÈçÆ¥ÅäÍ·¡¢Ö÷Ìâ¡¢½ÓÊÕÕßÕâÑùµÄÔ×Ó¼¶ÈÎÎñ£¬ÒÔ¼°Ïñ¼ì²âÀ¬»øÓʼþºÍ´¦ÀíĿ¼·þÎñÆ÷ÃüÁîÕâÑùµÄ¸ß²ãÈÎÎñ¡£
Mailets
James' µÄºÜ¶àÌØÐÔÊÇͨ¹ýÁбí8ÖÐMailet API ʵÏֵģ¬ÊìϤServlet APIµÄ¿ª·¢Õß¿ÉÄÜ»á¾õµÃÆæ¹Ö£¬Ëü¿´ÆðÀ´ºÜÑÛÊì¡£ÓëMatcher APIÒ»Ñù£¬Mailet½Ó¿ÚÖ§³ÖÁ½¸öÉúÃüÖÜÆÚ·½·¨£¬Ò»¸öÌṩ³õʼ»¯£¨init() ·½·¨£©£¬Ò»¸öÍ£Ö¹·þÎñ£¨destroy() ·½·¨£©¡£»¹ÓÐÁ½¸ö·µ»ØÐÅÏ¢µÄ·½·¨£¬getMailetInfo(), ·µ»ØÒ»¸ö°üº¬×÷Õß¡¢°æ±¾¡¢¸ÃmailetµÄ°æÈ¨µÈÐÅÏ¢µÄ×Ö·û´®¶ÔÏó£¬getMailetConfig()ºÜʵÓã¬Ëü·µ»ØmailetµÄÅäÖÃÐÅÏ¢¡£init()·½·¨ÓÐÒ»¸öMailetConfig¶ÔÏó×÷Ϊ²ÎÊý£¬ËäÈ»Õâ¸ö¶ÔÏó¿ÉÄܱ»Ð޸쬵«Ëüͨ³£ÊÇÓÉgetMailetConfig()ÌṩµÄ¡£
Áбí 8. The Mailet ½Ó¿Ú
£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½
public interface Mailet
{
void init(MailetConfig config);
void destroy();
String getMailetInfo();
MailetConfig getMailetConfig();
void service(Mail mail);
}
£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½
services() ·½·¨ÒÔÒ»¸öMail ¶ÔÏóΪ²ÎÊý£¬Íê³ÉÖ÷ÒªµÄ´¦Àí¹¤×÷¡£Maile¶ÔÏóÌṩÁ˶ÔÈÝÆ÷״̬¡¢ÓʼþÏûÏ¢ºÍÒª½øÐд¦ÀíµÄÔªÊý¾ÝµÄ·ÃÎÊ¡£
±í¸ñ2ÊÇJamesÒÑÓеÄmailetʵÏÖµÄÁÐ±í£¬Ëü¿ÉÒÔ¸øÄãÒ»¸öJamesÖ§³ÖµÄÌØÐÔºÍÒÑÓеÄmailetÓ¦ÓóÌÐòµÄÀàÐ͵ĸÅÄî¡£
±í¸ñ2. James×Ô´øµÄ mailets
Mailet Description
Null ½áÊøe-mailÏûÏ¢µÄ´¦Àí
AddHeader ¸øÏûÏ¢ÄÚÈݼÓÒ»¸öÎı¾µÄÍ·ÐÅÏ¢
AddFooter ¸øÏûÏ¢ÄÚÈݼÓÒ»¸öÎı¾µÄ½ÅÐÅÏ¢
Forward ½«ÏûϢת·¢¸øÁбíÖеĽÓÊÕÕß
Redirect Ìṩ¿ÉÅäÖõÄת·¢·þÎñ
ToProcessor ½«e-mail´¦Àíת·¢¸øÒ»¸öÖ¸¶¨µÄ´¦ÀíÆ÷
ToRepository ½«ÏûÏ¢¸´ÖƵ½Ö¸¶¨µÄĿ¼ÏÂ
NotifySender ½«ÏûÏ¢×÷Ϊ¸½¼þת·¢¸øÔʼµÄ·¢ËÍÕß
NotifyPostmaster ½«ÏûÏ¢×÷Ϊ¸½¼þת·¢¸øpostmaster
RemoteDelivery ¹ÜÀíSMTPÖ÷»úµÄ·¢ËÍ
LocalDelivery ½«ÏûÏ¢·¢Ë͵½±¾µØÓÊÏä
JDBCAlias ʹÓÃJDBCÊý¾ÝÔ´½øÐбðÃû·Òë
JDBCVirtualUserTable ʹÓÃJDBCÊý¾ÝÔ´½øÐиü¸´ÔӵıðÃû·Òë
UseHeaderRecipient ´ÓÏûÏ¢µÄÍ·ÐÅÏ¢ÖÐÖØ½¨ÓʼþµÄ½ÓÊÕÕß
ServerTime ·¢ËÍÒ»¸ö´øÓзþÎñÆ÷ʱ¼ä´ÁµÄÏûÏ¢
PostmasterAlias ½« postmaster@
µÄÏûϢת·¢µ½Ò»¸ö¸öÈ˵ĵØÖ·ÖÐ
AddHabeasWarrantMark ¸øÏûÏ¢Ìí¼ÓÒ»¸öHabeas Warrant±ê¼Ç
AvalonListserv Ìṩһ¸ö»ù±¾µÄĿ¼·þÎñÆ÷¹¦ÄÜ
AvalonListservManager ´¦ÀíĿ¼·þÎñÆ÷µÄ¹ÜÀíÃüÁî
´ÓÕâ¸öÁбí¿ÉÒÔ¿´³ö£¬Óм¸¸öJamesËùÖ§³ÖµÄÌØÐÔÒª¹é¹¦ÓÚMailet API£¬°üÀ¨¸´ÔÓµÄĿ¼·þÎñÆ÷Ö§³Ö¡¢±ðÃû¡¢´æ´¢ºÍ·ÓÉÄÜÁ¦¡£
ÆäËüÌØÐÔ
³ýÁËÕâ¸öϵÁÐËùÂÛÊöµÄ£¬James»¹ÓкܶàÆäËüµÄ¹¦ÄÜ¡£ÎÒÃÇ»áÔÚÕâÀï¼òµ¥µÄ½éÉÜ ÒÔʹÄã¸üºÃµÄÁ˽âJamesµÄʵ¼ÊÄÜÁ¦¡£Ê×ÏÈÊǶÔNNTPµÄÖ§³Ö£¬ÈÃJames¿ÉÒÔ×÷Ϊһ¸öUsenet·þÎñÆ÷¡£James»¹ÊµÏÖÁËFetchPOPÐÒ飬Äܹ»Ö§³Ö»ùÓÚÓʼþµÄÔ¶³Ì¹ÜÀí¡£RemoteManager ºÍSpoolManager ÌṩÁ˶àÀàÐÍ´æ´¢ºÍ¹ÜÀíµÄ³éÏó£¬Äܹ»Ö§³Ö¶àÖÖÀàÐ͵Ĵ洢ºÍ¹ÜÀí¡£ËäÈ»JamesÖ§³Ö²¿·Ö»òÈ«²¿µÄÒÔÊý¾Ý¿âΪÖÐÐĵĽâ¾ö·½°¸£¬µ«¶ÔÓÚ¿ª·¢¶øÑÔ£¬Ê¹ÓûùÓÚSpoolManagerµÄÎļþϵͳ¾Í×ã¹»ÁË¡£
JamesÌṩÁ˸ßЧµÄÓû§¹ÜÀí½Ó¿ÚºÍ·þÎñ£¬²¢ÇÒÖ§³ÖÓʼþÁÐ±í¡£ ʵ¼ÊÉÏ£¬ÓʼþÁÐ±í¹¦ÄÜÊÇJamesÌṩµÄ·þÎñÖÐ×î³£Óõģ¬Í¨³£Ò²ÊǹÜÀíԱѡÔñJames×÷Ϊe-mail½â¾ö·½°¸µÄÔÒò¡£
ÏÂÆªÄÚÈݼò½é
James»ù´¡ÉèÊ©µÄÉè¼ÆÄ¿±êÊÇÁé»îÐÔºÍÒ×ÓÚ½øÐÐÓ¦Óÿª·¢¡£E-mail Ó¦ÓõĿÉÄÜÐÔÊÇÎÞÏ޵ġ£ÔÚÕâ¸öϵÁÐµÄ follow-up installment ÖУ¬ÎÒÃǽ«¿ª·¢Ò»¸ö¼òµ¥µÄÓ¦ÓóÌÐòÌṩ¼ÙÆÚÏûÏ¢¹¦ÄÜ£¬ÔÊÐíÓû§ÏòÒ»¸öÌØ¶¨µÄJamesµØÖ··¢ËÍe-mail´ò¿ª¼ÙÆÚÏûÏ¢¹¦ÄÜ¡£Óû§¿ÉÒÔÆð²ÝÒ»·âe-mail×÷Ϊ×Ô¶¯´ð¸´ÏûÏ¢£¬ÔÚÓû§ÏòÁíÒ»¸öÌØ¶¨µÄJamesµØÖ··¢ËÍÈ¡ÏûÏûÏ¢¹Ø±Õ¼ÙÆÚÏûÏ¢¹¦ÄÜ֮ǰ£¬James»áÓôð¸´ÏûÏ¢×Ô¶¯´ð¸´¸ÃÓû§ÊÕµ½µÄÏûÏ¢¡£e-mail¿Í»§¶ËÈí¼þͨ³£»áÌṩÕâÖÖ»úÖÆ£¬µ«¿Í»§¶ËÈí¼þͨ³£»áÊܵ½µØÀíλÖõÄÏÞÖÆ£¬¶øÇÒÈç¹û¿Í»§¶Ë¹ØÁ˵ϰ£¬Õâ¸ö¹¦ÄܾͲ»Æð×÷ÓÃÁË¡£Í¨¹ýÔÚe-mail·þÎñÆ÷ÉÏʵÏÖÕâ¸ö¹¦ÄÜ£¬ÎÒÃÇ¿ÉÒÔ²»ÊÜÏÞÖÆµÄÔÚÈκεط½¼ì²éÎÒÃǵÄÓʼþ£¬¶øÇÒÎÒÃÇÒ²Äܹ»ºÜÈÝÒ׸ù¾Ý¼Æ»®µÄ±ä»¯Çé¿öÐ޸Ļظ´ÏûÏ¢£¬ÒÔʹ´ð¸´¸üÈ·ÇС£
×ÊÔ´
ÏÂÔØÕâÆªÎÄÕÂÀïÓõ½µÄÔ´´úÂë
ftp://www6.software.ibm.com/software/developer/library/j-james1.zip
´Ó Apache JamesÖ÷Ò³ÏÂÔØJames°ü
http://james.apache.org/
´ÓAvalon ÏîÄ¿Ö÷Ò³ÉîÈëѧϰAvalon
http://avalon.apache.org/
ÒªÖ´ÐÐÕâÆªÎÄÕÂÖеÄʾÀý´úÂë,ÄãÐèÒªÏÂÔØJavaMail API ºÍ JavaBeans Activation Framework.
http://java.sun.com/products/javamail
http://java.sun.com/beans/glasgow/jaf.html
ÔÚ½Ì³Ì "Fundamentals of JavaMail API" (developerWorks, August 2001)ÉîÈëѧϰ JavaMail .
http://www-106.ibm.com/developerworks/edu/j-dw-javamail-i.html
About the author
Claude Duguay has developed software for more than 20 years. He is passionate about the Java platform, reads about it incessantly, and writes about it as often as possible. You can reach him at claude.duguay@verizon.net.,