【 JSP 編 】

1. JavaMailのインストール
2. ソースコード
3. Subject の内容
4. 本文の内容

Tomcat 5.0
  • ここから JavaMail をダウンロード
  • ここから JAF をダウンロード ( JDK6 より含まれています )
  • 解凍して .jar を TOMCAT の common\lib にコピーして TOMCAT
    を再起動します

  • Beans に関しては こちら を参照して下さい


  • 入力された文字列を連結して 128 倍にして送信します。改行の無い長い文字列のメール送信を想定して
    います

  • <%@ page
    	language="java"
    	contentType="text/html;charset=Shift_JIS"
    	import="java.util.*"
    	import="javax.mail.*"
    	import="javax.mail.internet.*" 
    %>
    <jsp:useBean id="MyRequest" scope="session" class="basic.request" />
     
    <%!
    // *********************************************************
    // 認証用のプライベートクラス
    // *********************************************************
    private class SimpleAuthenticator extends Authenticator {
    
    	private String user_string = null;
    	private String pass_string = null;
    
    	public SimpleAuthenticator( String user_s, String pass_s ) {
    		super();
    		user_string = user_s;
    		pass_string = pass_s;
    	}
    
    	protected PasswordAuthentication getPasswordAuthentication(){
    		return new PasswordAuthentication( this.user_string, this.pass_string );
    	}
    }
    %>
    <%
     
    	// *****************************************************
    	// * リクエストデータを漢字変換して連想配列に保存
    	// *****************************************************
    	Hashtable Form = MyRequest.getRequest( request );
     
    	if ( Form.get("Data") != null ) {
     
    		// *****************************************************
    		// プロパティオブジェクトを作成
    		// プロパティオブジェクトは、extends Hashtable : 連想配列
    		// *****************************************************
    		Properties props = new Properties();
     
    		// *****************************************************
    		// * 連想配列に送信用サーバのアドレスをセット
    		// *****************************************************
    		props.put("mail.smtp.host","サーバー");	// ホスト名または IPアドレス
    		props.put("mail.smtp.port","587");	// サブミッションポート
    		props.put("mail.smtp.auth", "true" );	// SMTP 認証を行う
     
    		// *****************************************************
    		// メール用のセッションを作成
    		// *****************************************************
    		SimpleAuthenticator sa =
    			new SimpleAuthenticator("ユーザ","パスワード");
    		Session MailSession = 
    			Session.getInstance( props, sa );
     
    		// *****************************************************
    		// メール用のメッセージオブジェクトを作成
    		// *****************************************************
    		MimeMessage msg = new MimeMessage(MailSession);
     
    		String Address = "lightbox@nifty.com";
     
    		// *****************************************************
    		// 宛先
    		// *****************************************************
    		msg.setRecipients(
    			Message.RecipientType.TO,
    			Address
    		);
     
    		// *****************************************************
    		// 送信者
    		// *****************************************************
    		msg.setFrom(
    			new InternetAddress( Address ) 
    		);
     
    		int i;
    		String Data = (String)Form.get( "Data" );
    		for( i = 1; i <= 7; i++ ) {
    			Data += Data;
    		}
     
    		// *****************************************************
    		// 件名
    		// *****************************************************
    		msg.setSubject(
    			MimeUtility.encodeText(
    				Data,
    				"iso-2022-jp",
    				"B"
    			)
    		);
     
    		// *****************************************************
    		// 本文
    		// *****************************************************
    		msg.setContent(
    			Data,
    			"text/plain; charset=\"iso-2022-jp\""
    		);
     
    		// *****************************************************
    		// 送信
    		// *****************************************************
    		Transport.send( msg );
     
    	}
     
    %>
     
    <HTML>
    <HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=Shift_JIS">
    </HEAD>
    <BODY>
    <FORM method=post>
    <TEXTAREA name=Data></TEXTAREA>
    <INPUT type=submit value="送信">
    </FORM>
    </BODY>
    </HTML>
    
  • 以下は Beans のソースコードです

  • package basic;
     
    import javax.servlet.http.*;
    import java.util.*;
    import java.io.*;
     
    public class request {
     
    	// *****************************************************
    	// フォームから受け取った文字列が、ISO_8859_1でデコード
    	// されてしまったているので、文字列を元へ戻す為に、いっ
    	// たんISO_8859_1でエンコードし、それを再びShift_JISで
    	// デコードする
    	// *****************************************************
    	public String toShiftjis( String strData ) {
     
    		String ret;
     
    		if ( strData != null ) {
    			try {
    				ret = new String( 
    							strData.getBytes( "ISO_8859_1" ),
    							 "Shift_JIS"
    						);
    			}
    			catch( UnsupportedEncodingException e ) {
    				ret = "UnsupportedEncoding";
    			}
    		}
    		else {
    			ret = "null";
    		}
     
    		return ret;
     
    	}
     
    	// *****************************************************
    	// * リクエストデータを漢字変換して連想配列に保存
    	// *****************************************************
    	public Hashtable getRequest( HttpServletRequest request ) {
    		Map requestMap = request.getParameterMap();
    		int size = requestMap.size();
    		Set requestKeySet = request.getParameterMap().keySet();
    		Object KeyArray[] = requestKeySet.toArray();
    		Hashtable tableReauest = new Hashtable();
    		int i;
    		for ( i = 0; i < size; i++ ) {
    			tableReauest.put(
    				(String)KeyArray[i],
    				this.toShiftjis(
    					request.getParameter(
    						(String)KeyArray[i] 
    					) 
    				) 
    			);
    		}
    		return tableReauest;
    	}
     
    }
    

  • ひらがなの を、128文字セットしています

  • =?iso-2022-jp?B?GyRCJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIbKEI=?=
     =?iso-2022-jp?B?GyRCJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIbKEI=?=
     =?iso-2022-jp?B?GyRCJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIbKEI=?=
     =?iso-2022-jp?B?GyRCJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIbKEI=?=
     =?iso-2022-jp?B?GyRCJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIbKEI=?=
     =?iso-2022-jp?B?GyRCJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIbKEI=?=
     =?iso-2022-jp?B?GyRCJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIbKEI=?=
     =?iso-2022-jp?B?GyRCJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIkIiQiJCIbKEI=?=
    
  • 以下はダンプです

  • 3D 3F 69 73 6F 2D 32 30 32 32 2D 6A 70 3F 42 3F  =?iso-2022-jp?B?
    47 79 52 43 4A 43 49 6B 49 69 51 69 4A 43 49 6B  GyRCJCIkIiQiJCIk
    49 69 51 69 4A 43 49 6B 49 69 51 69 4A 43 49 6B  IiQiJCIkIiQiJCIk
    49 69 51 69 4A 43 49 6B 49 69 51 69 4A 43 49 62  IiQiJCIkIiQiJCIb
    4B 45 49 3D 3F 3D 0D 0A 20 3D 3F 69 73 6F 2D 32  KEI=?=.. =?iso-2
    30 32 32 2D 6A 70 3F 42 3F 47 79 52 43 4A 43 49  022-jp?B?GyRCJCI
    6B 49 69 51 69 4A 43 49 6B 49 69 51 69 4A 43 49  kIiQiJCIkIiQiJCI
    6B 49 69 51 69 4A 43 49 6B 49 69 51 69 4A 43 49  kIiQiJCIkIiQiJCI
    6B 49 69 51 69 4A 43 49 62 4B 45 49 3D 3F 3D 0D  kIiQiJCIbKEI=?=.
    0A 20 3D 3F 69 73 6F 2D 32 30 32 32 2D 6A 70 3F  . =?iso-2022-jp?
    42 3F 47 79 52 43 4A 43 49 6B 49 69 51 69 4A 43  B?GyRCJCIkIiQiJC
    49 6B 49 69 51 69 4A 43 49 6B 49 69 51 69 4A 43  IkIiQiJCIkIiQiJC
    49 6B 49 69 51 69 4A 43 49 6B 49 69 51 69 4A 43  IkIiQiJCIkIiQiJC
    49 62 4B 45 49 3D 3F 3D 0D 0A 20 3D 3F 69 73 6F  IbKEI=?=.. =?iso
    2D 32 30 32 32 2D 6A 70 3F 42 3F 47 79 52 43 4A  -2022-jp?B?GyRCJ
    43 49 6B 49 69 51 69 4A 43 49 6B 49 69 51 69 4A  CIkIiQiJCIkIiQiJ
    43 49 6B 49 69 51 69 4A 43 49 6B 49 69 51 69 4A  CIkIiQiJCIkIiQiJ
    43 49 6B 49 69 51 69 4A 43 49 62 4B 45 49 3D 3F  CIkIiQiJCIbKEI=?
    3D 0D 0A 20 3D 3F 69 73 6F 2D 32 30 32 32 2D 6A  =.. =?iso-2022-j
    70 3F 42 3F 47 79 52 43 4A 43 49 6B 49 69 51 69  p?B?GyRCJCIkIiQi
    4A 43 49 6B 49 69 51 69 4A 43 49 6B 49 69 51 69  JCIkIiQiJCIkIiQi
    4A 43 49 6B 49 69 51 69 4A 43 49 6B 49 69 51 69  JCIkIiQiJCIkIiQi
    4A 43 49 62 4B 45 49 3D 3F 3D 0D 0A 20 3D 3F 69  JCIbKEI=?=.. =?i
    73 6F 2D 32 30 32 32 2D 6A 70 3F 42 3F 47 79 52  so-2022-jp?B?GyR
    43 4A 43 49 6B 49 69 51 69 4A 43 49 6B 49 69 51  CJCIkIiQiJCIkIiQ
    69 4A 43 49 6B 49 69 51 69 4A 43 49 6B 49 69 51  iJCIkIiQiJCIkIiQ
    69 4A 43 49 6B 49 69 51 69 4A 43 49 62 4B 45 49  iJCIkIiQiJCIbKEI
    3D 3F 3D 0D 0A 20 3D 3F 69 73 6F 2D 32 30 32 32  =?=.. =?iso-2022
    2D 6A 70 3F 42 3F 47 79 52 43 4A 43 49 6B 49 69  -jp?B?GyRCJCIkIi
    51 69 4A 43 49 6B 49 69 51 69 4A 43 49 6B 49 69  QiJCIkIiQiJCIkIi
    51 69 4A 43 49 6B 49 69 51 69 4A 43 49 6B 49 69  QiJCIkIiQiJCIkIi
    51 69 4A 43 49 62 4B 45 49 3D 3F 3D 0D 0A 20 3D  QiJCIbKEI=?=.. =
    3F 69 73 6F 2D 32 30 32 32 2D 6A 70 3F 42 3F 47  ?iso-2022-jp?B?G
    79 52 43 4A 43 49 6B 49 69 51 69 4A 43 49 6B 49  yRCJCIkIiQiJCIkI
    69 51 69 4A 43 49 6B 49 69 51 69 4A 43 49 6B 49  iQiJCIkIiQiJCIkI
    69 51 69 4A 43 49 6B 49 69 51 69 4A 43 49 62 4B  iQiJCIkIiQiJCIbK
    45 49 3D 3F 3D                                   EI=?=
    

  • ひらがなの を、128文字セットしています

  • は、JIS では 0x24 0x22$" になります

  • 3D 31 42 24 42 24 22 24 22 24 22 24 22 24 22 24  =1B$B$"$"$"$"$"$
    22 24 22 24 22 24 22 24 22 24 22 24 22 24 22 24  "$"$"$"$"$"$"$"$
    22 24 22 24 22 24 22 24 22 24 22 24 22 24 22 24  "$"$"$"$"$"$"$"$
    22 24 22 24 22 24 22 24 22 24 22 24 22 24 22 24  "$"$"$"$"$"$"$"$
    22 24 22 24 22 24 22 24 22 24 22 3D 0D 0A 24 22  "$"$"$"$"$"=..$"
    24 22 24 22 24 22 24 22 24 22 24 22 24 22 24 22  $"$"$"$"$"$"$"$"
    24 22 24 22 24 22 24 22 24 22 24 22 24 22 24 22  $"$"$"$"$"$"$"$"
    24 22 24 22 24 22 24 22 24 22 24 22 24 22 24 22  $"$"$"$"$"$"$"$"
    24 22 24 22 24 22 24 22 24 22 24 22 24 22 24 22  $"$"$"$"$"$"$"$"
    24 22 24 22 24 22 24 22 24 3D 0D 0A 22 24 22 24  $"$"$"$"$=.."$"$
    22 24 22 24 22 24 22 24 22 24 22 24 22 24 22 24  "$"$"$"$"$"$"$"$
    22 24 22 24 22 24 22 24 22 24 22 24 22 24 22 24  "$"$"$"$"$"$"$"$
    22 24 22 24 22 24 22 24 22 24 22 24 22 24 22 24  "$"$"$"$"$"$"$"$
    22 24 22 24 22 24 22 24 22 24 22 24 22 24 22 24  "$"$"$"$"$"$"$"$
    22 24 22 24 22 24 22 3D 0D 0A 24 22 24 22 24 22  "$"$"$"=..$"$"$"
    24 22 24 22 24 22 24 22 24 22 24 22 24 22 24 22  $"$"$"$"$"$"$"$"
    24 22 24 22 24 22 24 22 24 22 24 22 24 22 3D 31  $"$"$"$"$"$"$"=1
    42 28 42                                         B(B