±¾ÎÄÖ÷Òª½â¾öÁ½¸öÎÊÌ⣺һ¸öÊÇÈçºÎ½«JamesµÄÓû§ÐÅÏ¢´æ´¢µ½Êý¾Ý¿âÖУ¬¶þÊÇÔÚ½øÐÐJames¶þ´Î¿ª·¢Ê±£¬ÈçºÎ´¦ÀíÃÜÂëÎÊÌâ¡£±¾ÎÄÃæÏò¶ÔJamesÓÐÒ»¶¨Ê¹ÓþÑéµÄÓû§£¬¶ÔÓÚJamesµÄ³õѧÕߣ¬ÇëÏÈÔĶÁÎÒµÄÁíһƪÎÄÕ¡¶Apache JamesʹÓÃÈëÃÅ¡·¡£
Ò»¡¢James¼ò½é
Apache James£¨Java Apache Mail Enterprise Server£©ÊÇApache×éÖ¯µÄ×ÓÏîĿ֮һ£¬ÍêÈ«²ÉÓô¿Java¼¼Êõ¿ª·¢£¬ÊµÏÖÁËSMTP¡¢POP3ÓëNNTPµÈ¶àÖÖÓʼþÏà¹ØÐÒé¡£
JamesÒ²ÊÇÒ»¸öÓʼþÓ¦ÓÃÆ½Ì¨£¬¿ÉÒÔͨ¹ýMailetÀ©³äÆä¹¦ÄÜ£¬ÈçMail2SMS¡¢Mail2FaxµÈ¡£JamesÌṩÁ˱ȽÏÍêÉÆµÄÅäÖ÷½°¸£¬ÓÈÆäÊǹØÓÚÓʼþÄÚÈÝ´æ´¢ºÍÓû§ÐÅÏ¢´æ´¢²¿·Ö£¬¿ÉÒÔÑ¡ÔñÔÚÎļþ¡¢Êý¾Ý¿â»òÆäËû½éÖÊÖб£´æ¡£
JamesÐÔÄÜÎȶ¨¡¢¿ÉÅäÖÃÐÔÇ¿£¬»¹ÊÇ¿ªÔ´ÏîÄ¿£¬ËùÓÐÔ´´úÂë²»´æÔÚ°æÈ¨ÎÊÌ⣬Òò´Ë£¬JamesÔÚÏîÄ¿ÖеÄÓ¦ÓÃÈÕÒæ¹ã·º£¬ÏÖÔÚ³£Óð汾Ϊ2.1£¬µ«×îа汾2.3ÒÑ¾ÍÆ³ö£¬ÔÚ±¾ÎÄÖУ¬ÎÒÃǽ«ÈÔÒÔJames2.1×÷Ϊ½éÉÜÀ¶±¾¡£
¶þ¡¢Ò»¸ö¼ÙÉèµÄÏîÄ¿
¼ÙÉèÎÒÒªÒÔJamesΪÓʼþ·þÎñÆ÷£¬¿ª·¢Ò»Ì×»ùÓÚWebµÄÓʼþϵͳ£¬¾ÍÏñ263.net£¬163.netÒ»Ñù£¬ÒªÇóʵÏÖÔÚÏß×¢²á¡¢ÔÚÏßÊÕ·¢ÓʼþµÈ¹¦ÄÜ¡£
ĬÈÏÇé¿öÏ£¬JamesµÄÓû§ÐÅÏ¢´æ´¢ÔÚÎı¾ÖУ¬ËäÈ»¼ÓÁËÃÜ£¬µ«ÓÉÓÚÎı¾´æµµ²»×㣬²»±ãÓÚ²éѯ¼°ÏàÓ¦´¦Àí£¬ÐÒºÃJamesÌṩÁ˶àÖÖÓû§ÐÅÏ¢´æ´¢·½°¸£¬ÈçÊý¾Ý¿â´æ´¢£¬LDAP´æ´¢µÈ¡£
ÕâÀïÎÒÃǽ«ÒÔÊý¾Ý¿â´æ´¢ÎªÀý£¬½²½âÓû§ÐÅÏ¢µÄ¹ÜÀí£¬Êý¾Ý¿â²ÉÓÃMySQL¡£µ±È»ÄãÒ²¿ÉÒÔ²ÉÓÃLDAP£¬±ÈÈçÃâ·ÑµÄOpenLDAP£¬¹¦Äܷdz£Ç¿´ó¡£
Èý¡¢Óû§ÐÅÏ¢µÄÊý¾Ý¿â´æ´¢
JamesÓʼþÓû§µÄÓû§ÐÅϢĬÈϱ£´æÔÚapps\james\var\usersĿ¼Ï£¬Í¨¹ýÐÞ¸ÄÅäÖÃÎļþapps\james\SAR-INF\config.xml£¬¿ÉÒÔ°ÑÓû§ÐÅÏ¢±£´æµ½Êý¾Ý¿âÖУ¬ÅäÖ÷½·¨ÈçÏ£º
µÚÒ»²½£ºÔÚMySQLÖÐн¨Ò»¸öÊý¾Ý¿âmail£¬Óû§Ãûroot£¬ÃÜÂëΪ¿Õ£»
µÚ¶þ²½£º´ò¿ªconfig.xml£¬ÕÒµ½<users-store>ÕâÒ»Ï´ËÃæÄ¬ÈϵÄÄÚÈÝΪ£º
<repository name="LocalUsers" class="org.apache.james.userrepository.UsersFileRepository"> <destination URL="file://var/users/"/> </repository>
|
ÐèÒªÐÞ¸ÄΪ£º
<repository name="LocalUsers" class="org.apache.james.userrepository.JamesUsersJdbcRepository" destinationURL="db://maildb/users"> <sqlFile>file://conf/sqlResources.xml</sqlFile> </repository>
|
ͨ¹ýÐ޸ģ¬ÎÒÃǾͰÑÓû§ÐÅÏ¢µÄ´æ´¢½éÖÊ´Ófile¸Ä³ÉÁËdb£¬<sqlFile>ÊÇÖ¸Ã÷ÁËÔÚdbÖеÄÊý¾Ý±í½á¹¹¼°Ïà¹ØÊý¾Ý¿âÐÅÏ¢¡£
µÚÈý²½£ºÈÔÈ»ÊÇconfig.xml£¬ÕÒµ½<data-sources>ÏĬÈÏÄÚÈÝΪ¿Õ£¬°Ñ´ËÏîÄÚÈÝÐÞ¸ÄΪ£º
<data-source name="maildb" class="org.apache.james.util.mordred.JdbcDataSource"> <driver>org.gjt.mm.mysql.Driver</driver> <dburl>jdbc:mysql://127.0.0.1/mail</dburl> <user>root</user> <password></password> <max>20</max> </data-source>
|
<driver>ÊÇÖ¸MySQLµÄJDBCÇý¶¯£¬<dburl>Ö¸Êý¾Ý¿âµÄ·ÃÎÊ·¾¶£¬IPºóµÄmail¼´MySQLÖÐн¨Êý¾Ý¿âÃû£¬½ÓÏÂÀ´ÊÇÓû§Ãû¡¢ÃÜÂë¼°×î´óÁ¬½ÓÊý¡£
ÖÁ´Ë£¬Êý¾Ý¿âÅäÖÃÍê³É£¬Æô¶¯James£¬ÈôÕý³£ÎÞÎó£¬Çëͨ¹ýtelnetÌí¼ÓÒ»¸öÐÂÓû§£¬±ÈÈçadduser holen 123456£¬È»ºó¼ì²éMySQLÖеÄmailÊý¾Ý¿â£¬ÏÂÃæ½«ÓÐÒ»¸ö±íusers£¬ÕâÊÇJames¸ù¾Ýfile://conf/sqlResources.xmlµÄÄÚÈÝ´´½¨µÄ¡£
ͨ¹ýÒÔÉÏÅäÖã¬JamesµÄÓû§ÐÅÏ¢¾Í¿ÉÒÔ±£´æÔÚÊý¾Ý¿âÖÐÁË¡£
ËÄ¡¢ÃÜÂëÎÊÌâµ±Äãͨ¹ýtelnetÌí¼ÓÐÂÓû§Ê±£¬±ÈÈçadduser holen 123456£¬Äã¿ÉÒԲ鿴Êý¾Ý¿âÖеļǼ£¬µÚÒ»¸ö×Ö¶ÎÊÇholen£¬µÚ¶þ×Ö¶ÎÊÇÃÜÂ룬µ«ÃÜÂë²¢·Ç123456£¬¶øÒ»´®¡°ÂÒÂ롱£¨zhwQUMTwdMqWfm/h0biB51Gf£©??ÕâÊǼÓÃÜÂëºóµÄÃÜÂëÄÚÈÝ£¬ÔÙ¿´ºóÃæµÄ×Ö¶ÎÊÇ¡°SHA¡±£¬ÏÔÈ»ÓõÄÊÇSHA¼ÓÃÜ·½Ê½¡£
ͨ¹ýtelnet·½Ê½Ìí¼ÓÐÂÓû§£¬Óû§ÃÜÂ뽫×Ô¶¯¼ÓÃÜ£¬È»ºó²åÈëÊý¾Ý¿âÖС£µ«Í¨¹ýtelnet·½Ê½½øÐÐÓû§¹ÜÀíÓÐ×ÅÖî¶à²»±ã£¬¾¡¹ÜÄã¿ÉÒÔ½èÖúJamesµÄÒ»¸öRMI¹¤¾ß°ü£¬Ìá¸ßЧÂÊ£¬µ«ÈÔȻûÓб¾Öʸı䣬µ±ÐèÒªÓÃ×÷ÉÌÒµÓÃ;ʱ£¬Äã¸ü²»ÄÜÒªÇóÄãµÄ¿Í»§Êì¼ÇÄÇÒ»¶ÑÃüÁî·û¡£
Ò»°ãÎÒÃÇ¿ÉÒÔ×öÒ»¸öWebǰ¶Ë£¬Í¨¹ýÍøÒ³ÐÎʽ£¬Ìí¼ÓÐÞ¸ÄÓû§£¬½çÃæÓѺã¬Éµ¹Ï»¯Ê¹Óã¬Èç263»ò163Ò»Ñù¡£ÈôÕâÑù×ö£¬ÎÒÃǾÍÐèÒªÖ±½Ó²Ù×÷Êý¾Ý¿â£¬Ìí¼ÓÓû§¼Ç¼»òÐÞ¸Äɾ³ýÓû§¼Ç¼ÁË¡£µ«±ðÍüÁË£¬JamesĬÈ϶ÔÓû§ÃÜÂëÊǼÓÃܵ쬼ÈÈ»ÎÒÃÇÒªÖ±½Ó²Ù×÷Êý¾Ý¿â£¬ÄÇôÎÒÃÇÖ»ÓÐÁ½¸öÑ¡Ôñ£ºÒªÃ´ÎÒÃÇÑо¿ÆäÃÜÂë»úÖÆ£¬Ìí¼Ó¼Ç¼ʱ£¬ÎÒÃǶÔÐÂÔöÓû§µÄÃÜÂë½øÐÐͬÑù¼ÓÃÜ£¬ÒªÃ´ÎÒÃÇÈ¥µôJamesµÄ¼ÓÃÜ»úÖÆ£¬Ê¹ÆäÃ÷Âë±£´æ¡£
ÐҺã¬ÕâÁ½ÖÖÑ¡Ôñ¶¼ÊÇ¿ÉÐеġ£ÎÒÃÇ´ÓApacheÍøÕ¾ÏÂÔØJamesµÄÔ´Âë°ü£¬ÏÂÔØºóµÄÎļþΪjames-2.1-src.zip£¬½Ó½ü8M£¬Í¨¹ý·ÖÎöÔ´Â룬ÎÒÃÇ·¢ÏÖ£¬ÓëÓû§ÃÜÂëÏà¹ØµÄÎļþÊÇDefaultUser.java£¬²¿·ÖÔ´ÂëÈçÏ£º
package org.apache.james.userrepository; ¡¡ /** * Method to verify passwords. * * @param pass the String that is claimed to be the password for this user * @return true if the hash of pass with the current algorithm matches * the stored hash. */ public boolean verifyPassword(String pass) { try { String hashGuess = DigestUtil.digestString(pass, algorithm); return hashedPassword.equals(hashGuess); } catch (NoSuchAlgorithmException nsae) { throw new RuntimeException("Security error: " + nsae); } } /** * Sets new password from String. No checks made on guessability of * password. * * @param newPass the String that is the new password. * @return true if newPass successfuly hashed */ public boolean setPassword(String newPass) { try { hashedPassword = DigestUtil.digestString(newPass, algorithm); return true; } catch (NoSuchAlgorithmException nsae) { throw new RuntimeException("Security error: " + nsae); } } ¡¡
|
µÚÒ»¸ö·½·¨verifyPassword()ÊÇÓÃÀ´×öÃÜÂëÈÏÖ¤£¬´«ÈëµÄ²ÎÊýÊÇÃ÷ÎÄÃÜÂ룬ͨ¹ýDigestUtil.digestString()·½·¨£¬×ª»»³ÉÃÜÎÄÃÜÂ룬ȻºóÓëÊý¾Ý¿âÖÐÃÜÂë×÷±È½Ï£¬·µ»Ø±È½Ï½á¹û¡£Çë×¢ÒâÕâÀïµÄDigestUtil.digestString()·½·¨£¬ÔÚºóÃæ»¹ÔÚÌáµ½¡£
µÚ¶þ¸ö·½·¨setPassword()ÊÇÓÃÓÚÃÜÂëת»»µÄ£¬°ÑÃ÷ÎÄת³ÉÃÜÎÄ£¬ÓõÄͬÑùÊÇDigestUtil.digestString()·½·¨¡£
̸µ½ÕâÀÏàÐÅÄãÓ¦¸ÃÖªµÀÔõôÔÚ×Ô¼ºµÄ³ÌÐòÖнøÐÐÃÜÂëת»»ºÍÃÜÂëÈÏÖ¤Á˰ɣ¡Æäʵ²¢²»ÊÇÒªÄã×Ô¼ºÈ¥Ð´Ò»¸öSHAµÄ¼ÓÃÜËã·¨£¬¼ÈÈ»JamesÒѾÌṩÁ˴˹¦ÄÜ£¬Äãµ÷ÓñãÊÇÁË¡£
»¹ÓÐÒ»ÖÖÇé¿ö£¬¿ª·¢ÕßÐèÒªÔÚÊý¾Ý¿âÖбØÐëÓÃÃ÷Îı£´æÃÜÂ룬ÕâÑù¾Í²»±ØÔÚ×Ô¼ºÐ´µÄ³ÌÐòÖнøÐÐÃÜÂëת»»ÁË£¬¶øÇÒµ±¶à¸öÓ¦ÓÃϵͳ²ÉÓÃͳһÓû§Ä£ÐÍʱ£¬×îºÃÖ»ÓÐÒ»¸öÓû§ÊµÀý¡£ÒªÊµÏÖÕâ¸öÐèÇ󣬾ÍÖ»ÄÜÐÞ¸ÄJamesÔ´´úÂëÁË£¬°ÑverifyPassword()·½·¨ºÍsetPassword()¸Ä³É£º
public boolean verifyPassword(String pass) { return hashedPassword.equals(pass); } public boolean setPassword(String newPass) { hashedPassword = newPass; return true; }
|
Æäʵ¾ÍÊǰÑת»»¹ý³ÌÈ¥µô£¬±£´æºÍÈÏÖ¤¾Í¶¼²ÉÓÃÃ÷ÎĽøÐÐÁË¡£
ÄãÒªÊǾõµÃSHA·½Ê½²»Í×£¬Ò²¿ÉÒÔ¹Ò½Ó±ðµÄ¼ÓÃÜ·½Ê½£¬Í¬ÑùÊÇÐÞ¸ÄÕâÁ½¸ö·½·¨¡£
×¢Ò⣬µ±ÄãÐÞ¸ÄÁËJamesµÄÔ´Âëºó£¬ÄãÐèÒªÓÃAntÖØÐÂbuild JamesÏîÄ¿£¬buildºó½«ÔÚjames-2.1-src\dist\james-2.1\appsÏÂÃæÕÒµ½ÐÂÉú³ÉµÄjames.sarÎļþ¡£°Ñ¸ÃÎļþ¸²¸ÇJamesÔÀ´james.sar£¬²¢É¾³ýÓëjames.sarͬ¼¶µÄjamesĿ¼£¬ÖØÆô¶¯james¼´¿É¡£½¨Òé±£ÁôÔÀ´µÄconfig.xml£¬ÃâµÃÓÖÅäÒ»´Î¡£
ͨ¹ýÒÔÉÏ̽ÌÖ£¬ÎÒÃÇÃ÷°×ÁËÈçºÎͨ¹ýWeb·½Ê½½øÐÐÓû§×¢²áºÍÓû§µÇ¼ÇµÈ¡£ÐèҪ˵Ã÷Ò»µãÊÇ£¬James×Ô¶¯Éú³ÉµÄusers±íÖÐÖ»ÓÐ7¸ö×ֶΣ¬¶øÇÒ¶¼ÊÇϵͳÐèҪʹÓõġ£Ò»°ã×¢²áʱÐèÒªÊäÈëµÄÐÅÏ¢Ïî±È½Ï¶à£¬Õâʱ½¨Ò鿪·¢Õß×Ô¼ºÔÙ½¨Ò»¸öбíUSERINFO£¬ÓÃusername°ÑÁ½¸ö±í¹ØÁªÆðÀ´£¬²»½¨ÒéÐÞ¸Äusers±íµÄÄÚÈÝ£¨Èç¹ûÏëÊÔÊÔ£¬Çë²Î¿¼file://conf/sqlResources.xml£©¡£
Îå¡¢»ùÓÚJamesµÄÓʼþϵͳ¿ª·¢·½°¸¼òÊöJamesÔËÐÐÔÚWin2000ÉÏ£¬¿Í»§¶Ë²ÉÓÃWeb½çÃæ£¨·Â263·ç¸ñ£©¡¢Foxmail»òOutLook Express£¬¸ÃϵͳÖ÷ÒªÃæÏò1000ÈËÒÔϵÄÖÐСÆóÒµ¡£
»ùÓÚJamesµÄÓʼþ¿ª·¢£¬Ö÷Òª°üÀ¨Á½¸ö·½Ã棺һÊÇÓʼþϵͳµÄºǫ́¹ÜÀí£¬ÁíÒ»¸öÊǿͻ§¶ËÓ¦ÓÃϵͳ¡£
ºǫ́¹ÜÀíµÄ¹¦ÄÜÖ÷Òª°üÀ¨Óû§µÄÌí¼Ó¡¢É¾³ý¡¢Ð޸ġ¢Óû§Ê¹ÓÿռäÖ¸Åä¡¢Óʼþ±¸·ÝµÈ¡£
Web¿Í»§¶Ë¹¦ÄܰüÀ¨ÊÕ¼þÏä¡¢·¢Óʼþ¡¢·¢¼þÏä¡¢²Ý¸åÏä¡¢»ØÊÕÕ¾¡¢µØÖ·±¾¡¢×Ô¶¨ÒåÎļþ¼Ð¡¢ÅäÖõȡ£
Óû§ÐÅÏ¢´æ´¢ÔÚMySQLÊý¾Ý¿âÖУ¬ÓʼþÄÚÈÝĬÈÏ´æ´¢ÔÚÎĵµÖС£
ϵͳ²ÉÓÃStruts¼Ü¹¹£¬ÔËÐл·¾³ÎªApache1.3+Tomcat4.1£¬Êý¾Ý¿âÁ¬½Ó³Ø²ÉÓÃTomcat×Ô´øµÄDBCP¡£
ϵͳ¿ª·¢Ô¤¼ÆÐè60ÈËÌìÍê³É£¬¿ª·¢ÈËÔ±ÐèÒªÕÆÎÕStrutsºÍJavaMail¡£
ѹÁ¦²âÊÔ³¬¹ý50¸ö²¢·¢¡£
Áù¡¢²Î¿¼×ÊÁÏJames 2.1 Documentation ,