Java [メール送受信]

Java からメールを送受信するにはSun から出ているJavaMail を使います。
更新日 2016-02-13

ダウンロード

コチラからJavaMail の最新版をダウンロードします。落としたら解凍して mail.jar をウェッブアプリの ディレクトリ(/WEB-INF/lib )にコピーしておきます。Eclipse のBuild Path(クラスパス) にも含めておきます。

SMail クラス

Java Mail を使ったメール送信メソッドを作ってみました。IMAP であれば、送ったメールを送信済みトレイにも 残す事ができます。IMAP サーバーについてはPostfix にて動作確認しています。
ソースコード(SMail.java)

SMail.SendMail()

メールを送信できます。IMAP の送信済みフォルダを適宜設定して下さい。
public class SMail 
{
    public static Boolean SendMail
	(
		String strSMTPHost,
		String strAuthUser,
		String strAuthPasswd,
		String strFrom,
		String strTo,
		String strSubject,
		String strText,
		Boolean bSaveIMAPSentFolder
	)
	{		
		Boolean bSuccess = false;

        String charset = "ISO-2022-JP";
        String strIMAPSentFolder = "Sent";
		
    	// --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
    	{
        	String[][] vecReplace = {
        		{"\uff5e", "\u301c"},	// 〜
        		{"\uff0d", "\u2212"},	// ー
        		{"��","(株)"}			// ��
        	};
        	
			for (int nReplace = 0; nReplace < vecReplace.length; nReplace++)
			{
				String[] vecPair = vecReplace[nReplace];
				
	        	strText = strText.replaceAll(vecPair[0], vecPair[1]);
	        	strSubject = strSubject.replaceAll(vecPair[0], vecPair[1]);
			}
    	}
    	// --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---


    	Transport transport = null;
    	Store store = null;
    	Folder folder = null;
    	
        try
        {
            Properties properties = new Properties();
            {
	            properties.put("mail.transport.protocol", "smtp");
	            properties.put("mail.smtp.host", strSMTPHost);
	            properties.put("mail.host", strSMTPHost);

	            if (strAuthUser != null)
	            {
	            	properties.put( "mail.smtp.auth", "true" );
	            }
            }
            
            Session session = Session.getInstance(properties);
            InternetAddress[] vecToAddress = {new InternetAddress(strTo)};
            
			// Create message. 
            MimeMessage mimeMessage = new MimeMessage(session);
            {
            	InternetAddress fromAddress = new InternetAddress(strFrom);
	            mimeMessage.setFrom(fromAddress);
	            mimeMessage.setRecipients(Message.RecipientType.TO, vecToAddress);
	            mimeMessage.setSubject(strSubject, charset);
	            mimeMessage.setText(strText, charset);
	            mimeMessage.setHeader("Content-Type", 
									  "text/plain; charset=\"" + charset + "\"");
	            mimeMessage.setHeader("Content-Transfer-Encoding", "7bit");
	            mimeMessage.setHeader("envelope-from", strFrom);
	            mimeMessage.setSentDate(new Date());
            }
            
            transport = session.getTransport("smtp");
       	
            if (strAuthUser != null)
            {
            	transport.connect(strSMTPHost, strAuthUser, strAuthPasswd);
        	}
            else
            {
            	transport.connect();
            }

            // Send message.
            transport.sendMessage(mimeMessage, vecToAddress);


            // Save IMAP
            if (bSaveIMAPSentFolder)
            {
        		store = session.getStore("imap");
        		store.connect(strSMTPHost, 143, strAuthUser, strAuthPasswd);
        		folder = store.getFolder(strIMAPSentFolder);
        		
        		if(folder.exists())
        		{
        			folder.open(Folder.READ_WRITE);
        			{
        				MimeMessage vecMessage[] = {mimeMessage};
		            
        				folder.appendMessages(vecMessage);
        			}
        		}   	
            }
            
            bSuccess = true;
        }
        catch(Exception ex)
        {
        	ex.printStackTrace();
        }
    	finally
        {
    		if (folder != null)
    		{
    			try 
    			{
					folder.close(false);
				}
    			catch (MessagingException ex)
    			{
    				ex.printStackTrace();
				}    			
    		}

    		if (store != null)
    		{
    			try
    			{
					store.close();
				}
    			catch (MessagingException ex)
    			{
    				ex.printStackTrace();
				}
    		}    		
    		
    		if (transport != null)
    		{
    			try 
    			{
					transport.close();
				}
    			catch (MessagingException ex) 
				{
    				ex.printStackTrace();
				}
    		}
        }
        
        return bSuccess;
	}