Spring Java Mailメール


今日springのメールを送る机能の下でコードをテストして出会った问题を言います
まずアプリケーションContext.xmlでメール情報を設定します
  <bean id="mailSender"  
  class="org.springframework.mail.javamail.JavaMailSenderImpl">  
        <property name="host">  
            <value>"smtp.163.com"</value>  
        </property>  
        <property name="javaMailProperties">  
            <props>  
                <prop key="mail.smtp.auth">true</prop>  
                <prop key="mail.smtp.starttls.enable">true</prop> 
                <prop key="mail.smtp.timeout">25000</prop>  
            </props>  
        </property>  
        <property name="username">  
            <value>[email protected]</value>  
        </property>  
        <property name="password">  
            <value>xxxxxx</value>  
        </property>  
    </bean>  
	<!-- mailbox.dxsport.com.cn, port: 25 -->
	<!--         -->
	<bean id="mailManager" class="com.wfy.email.MailManager">
		<property name="mailSender" ref="mailSender" />
		<property name="textTemplate">
			<value><![CDATA[
			  %1$s %2$tF   .
					System Administrator.
			]]></value>
		</property>
	</bean>

mailManagerクラス
package com.wfy.email;


import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;

public class MailManager {
	
	private JavaMailSender mailSender;
	
	private  String textTemplate;//        
	
	private static final String  EMAIL_FROM = "[email protected]";

	public void setMailSender(JavaMailSender mailSender) {
		this.mailSender = mailSender;
	}
	
	
	public void setTextTemplate(String textTemplate) {
		this.textTemplate = textTemplate;
	}

	/**
	 *               .
	 */
	public void sendNotificationMail(String subject , String  content , String  toEmail) {
		SimpleMailMessage msg = new SimpleMailMessage();//SimpleMailMessage      text  
		msg.setFrom(EMAIL_FROM);//   QQ     xml             (        ,       Email  ,   xml  username  ??) 
		msg.setTo(toEmail);//   
		msg.setSubject(subject);//  
		msg.setText(content);//    
		try {
			mailSender.send(msg);//    
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

テストコード:
/**
	 * @param args
	 */
	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");   
		MailManager mailManager=(MailManager) ctx.getBean("mailManager");
		mailManager.sendNotificationMail("test", "  spring     !!!!", "[email protected]");
		System.out.println("   !!!");

	}

質問:1 java.lang.NoClassDefFoundError:javax/mail/MessagingExceptionのエラーが発生しました
ネット上の解決方法:
j 2 ee 1.4のactivation.jarとmail.jarパッケージをプロジェクトにコピーし、再配置し、問題を解決します.
Spring送信メールは実際にJava Mailクラスライブラリを使用しており、これはJavaEE標準クラスライブラリのドイツの一部であり、SpringはJava Mailのみをパッケージ化している.ただしJDK 5以上の環境ではjava EE 5が持つJava Mailクラスライブラリに問題があるためJ 2 EE 1.4のjava Mailを使用する.そこでJ 2 EE 1.4のメール関連パッケージ,すなわちactivation.jar,mail.jarを追加する.                   2.Could not connect to SMTP host: "smtp.163.com ", port: 25;
            しばらくはどうしたのか分かりませんが、ping smtp.163.comはping通です.ネット上で調べてみると、ウイルス対策ソフトに関係していると言っています.ファイアウォールに関係しています.メールボックスの問題の私は試しても役に立ちません.私はqqを使います  163やってみてもだめだったので、最後にうちの会社のメールで送信に成功しました.メールボックスは迷惑メール防止のため2006年以降に申請した163メールボックスで、いずれもSTMPのサービスが開通しておらず、クライアントからメールを送ることができないという.真偽を知らない
また、McAfeeをオフにすればいいという話もありますが、McAfeeは何をテストしていないのか分かりません.
                   3.java.lang.NoClassDefFoundError:com/sun/mail/util/LineInputStreamエラー
           ネット上の解決方法:Exception in thread"main"java.lang.NoClassDefFoundError:com/sun/mail/util/LineInputStream上記のエラーが発生した場合、メールの受信から遠くないことをおめでとうございます.そうしないと、すべての異常を解決してからこの投稿を見てください.
JAvax.mailとjavax.activationの2つのパッケージはすでにjavaEE 5の中で基礎パッケージに属しています.JDKにはすでに持っていますが、中の方法は今の外のmail.jarとactivation.jarといくつかの違いがあるので、初心者が直接copyの他の人のコードを作るときに上記のエラーが発生することが多いです.くだらないことを言わないで、次は解決方法です.
X:\Program Files\MyEclipse 6.5\myeclipse\eclipse\plugins\com.genuitec.eclipse.j2eedt.core_6.5.0.zmyeclipse650200806\data\libraryset\EE_5
このパスでは、javaee.jarが見えます.rarでこのファイルを開き、javaxフォルダに入り、mail.jarとactivation.jarを削除します(私のjavaee.jarでは、この2つのものはフォルダですが、とにかく削除すればOKですが、バックアップに注意してください)    この问题は上记の通り解决していません(私が使っているMyEclipse 8.5の経路があまり违うので削除し间违ったかもしれません!)后でJ 2 EE 1.4に変更して解决します
      COPY他の人のいくつかの資料
    163メールボックス  POP 3サーバ:pop 3.163.com  SMTPサーバー:smtp.163.com  Yahooメールボックス     POP 3サーバ:pop.mail.yahoo.com.cn     SMTPサーバー:smtp.mail.yahoo.com  メールボックス  POP 3サーバ:pop 3.sohu.com   SMTPサーバー:smtp.sohu.com  新浪メールボックス  POP 3サーバ:pop.sina.com.cnまたはpop 3.sina.com.cn   SMTPサーバー:smtp.sina.com.cn       smtpサーバの認証要求オプションを選択してください  139メールボックス  POP 3サーバ:pop 3.139.com   SMTPサーバー:smtp.139.com  Gmailメールボックス      POP 3サーバ:pop.gmail.com  ポート:995  sslを開く      SMTPサーバー:smtp.gmail.com  ポート:465または587  sslを開く      アカウントはユーザー名で、パスワードは同じで、メールアドレスは[email protected]  QQメールボックス  POP 3サーバ:pop.q.com   SMTPサーバー:smtp.qq.com     SMTPサーバはjava.lang.ClassNotFoundException:javax.mail.MessagingException tomcatがJavaMailのAPIクラスを認識していない理由を認証する必要があります.すべてのAPIがjavaee.jarで見つけられると思っていたので、このjarパッケージをWEB-INF下のlibディレクトリにコピーしてしまい、結局ダメでした.tomcatのlibディレクトリにコピーすると、java.lang.NoSuchMethodError:javax.servlet.ServertContext.getContextPath()Ljava/lang/String;実はjar競合の問題なので、tomcatディレクトリの下のlibディレクトリにコピーしたばかりのjavaee.jarを削除して、サーバーを起動することができます.しかし、tomcatがJavaMail APIを見つけることができないという問題は解決されず、mail.jarをダウンロードしてWEB-INFの下のlibディレクトリに置くだけで、結果はいいです.
      追加してまたQQのメールボックスの設定で発送することができることを調べました     設定手順は次のとおりです.  :
    1.メールボックスに入る-->設定-->口座-->pop 3/SMTPサービスチェック(IMAP/STMTPサービスもありますが、どれを選んでも具体的にテストしていないので、私は選んでいます)して保存OK;
   2.アプリケーション.xmlのhostプロパティをsmtp.qq.comに設定      その他の注意
msg.setFrom(EMAIL_FROM);//  xml      qq                
//javax.mail.MessagingException: 501 mail from address must be same as authorization user

  以上のように修正してメールを送ることができます(現在はテキストだけで添付ファイルや画像を送ることもできます)が、送信するメールの数には制限があるようです.
  ソースダウンロードアドレス:download.csdn.net/detail/nn 955/4655282
html形式で添付ファイル付きのメールを送信します.
public class SendMail {
 public ApplicationContext ctx = null;
 public SendMail() {
  //     
  ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
 }
 public void send() {
  //  JavaMailSender bean
  JavaMailSender sender = (JavaMailSender) ctx.getBean("mailSender");
  JavaMailSenderImpl senderImpl = new JavaMailSenderImpl();
  MimeMessage mailMessage = senderImpl.createMimeMessage();
  //  utf-8 GBK  ,        
  MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true,"utf-8");
  try {
   messageHelper.setTo(email.getEmail());//      
   messageHelper.setFrom("[email protected]");//   
   messageHelper.setSubject("    ");//  
   //    ,     true
   messageHelper.setText("<html><head></head><body><h1>hello!!chao.wang</h1></body></html>",true);
   //    
   messageHelper.addInline("a", new File("E:/xiezi.jpg"));
   messageHelper.addInline("b", new File("E:/logo.png")); 
   File file=new File("E:/      .rar");  
   //                 ,  MimeUtility.encodeWord()            
   messageHelper.addAttachment(MimeUtility.encodeWord(file.getName()), file); 
   sender.send(mailMessage);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

参考原文:http://www.iteye.com/topic/348564