CGIを経由したメール送信
URL url=new URL("http://150.42.41.129/cgi-bin/tool/sendmail.cgi"); URLConnection uc = url.openConnection(); uc.setDoOutput(true); uc.setUseCaches(false);URLクラスのインスタンスを、サーバーの CGI を指定して生成します。これから、url.openConnection(); でuc を作成し、setDoOutput() で、出力モードを設定します。これで、
PrintWriter pw = new PrintWriter(uc.getOutputStream());で、PrintWriterクラスの pw を生成すると、pwから CGI にURLエンコードしたパラメータが送出されます。この文字列は、html のFORM タグで、入力した情報を送信する場合と同じです。
String data="from="+textFieldFrom.getText()+"&to="+textFieldTo.getText() +"&title="+textFieldsbj.getText()+"&msg="+textFieldmsg.getText();form= の from が送信者アドレスを示すキーで、CGI側でも、この名前を利用して情報を取り出します。したがって、パラメータを送る順番には意味がありません。 & はパラメータを接続(分離する)する 記号になります。スペースなどの特殊記号、漢字などは別の文字に変換され送ります。
BufferedReader br = new BufferedReader(new InputStreamReader(uc.getInputStream())); String line=""; String answer= ""; while((line = br.readLine()) != null){ answer += line + "\n"; //System.out.println(answer); }で受け取ることができます。CGIの送信文字は、ページを記述するhtml 文書になりますが、ここでは、単に文字列として受け取ることになります。
my $SENDMAIL = "/usr/lib/sendmail"; $subject = mimeencode( jcode'jis($FORM{'title'}) ); $message=$FORM{'msg'}; $message = jcode'jis($message); $from = $FORM{'from'}; $to = $FORM{'to'}; $from =~ s/@/\@/; open MAIL,"|$SENDMAIL -t -f $from" || &error("メール送信失敗・・・"); print MAIL "Subject: $subject\n"; print MAIL "To: $to\n"; print MAIL "\n"; print MAIL "$message\n"; close MAIL; }実際のメール送信は、open MAIL 以後で行います。openはファイル(javaの場合ストリームの概念に対応します)形式で、指定したアプリケーション (この場合、/usr/lib/sendmail) に、 print MAIL でデータを流し込むことができます。
void buttonSend_actionPerformed(ActionEvent e) { try{ URL url=new URL("http://150.42.41.129/cgi-bin/tool/sendmail.cgi"); URLConnection uc = url.openConnection(); uc.setDoOutput(true); uc.setUseCaches(false); System.out.println("connected?"); PrintWriter pw = new PrintWriter(uc.getOutputStream()); String data="from="+textFieldFrom.getText()+"&to="+textFieldTo.getText() +"&title="+textFieldsbj.getText()+"&msg="+textFieldmsg.getText(); String postdata=data; System.out.println("send:"+postdata); pw.print(postdata); pw.flush(); pw.close(); BufferedReader br = new BufferedReader(new InputStreamReader(uc.getInputStream())); String line=""; String answer= ""; while((line = br.readLine()) != null){ answer += line + "\n"; //System.out.println(answer); } System.out.println(answer); br.close(); } catch(Exception ex){ ex.printStackTrace(); } } }
#!/usr/bin/perl # first sample use strict; require "./mimew.pl"; require "./jcode.pl"; use CGI_Lite; my $SENDMAIL = "/usr/lib/sendmail"; my $PLATFORM = 'Unix'; # $ENV{'REQUEST_METHOD'}='GET'; # $ENV{'QUERY_STRING'}='from=web@chukyo-u.ac.jp&to=yt7m-itu@asahi-net.or.jp&msg=hello&title=test'; #main my ($from,$to,$message,$subject,%FORM); &decode(); &send_mail(); &showPage("送信完了しました<br> . $from . $to.<BR>"); #送信完了を知らせるページを作成する sub decode { my ($buffer,@pairs,$pair); if ($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/, $buffer); foreach $pair (@pairs) { my ($key,$value); ($key,$value) = split(/=/, $pair); $FORM{$key} = $value; } } #------------# # メール送信 # #------------# sub send_mail{ $subject = mimeencode( jcode'jis($FORM{'title'}) ); $message=$FORM{'msg'}; $message = jcode'jis($message); $from = $FORM{'from'}; $to = $FORM{'to'}; #open MAIL,"|$SENDMAIL -t -f mito\@ccad.sccs.chukyo-u.ac.jp" || &error("メール送信失敗・・・"); #$from = "mito\@sccs.chukyo-u.ac.jp"; $from =~ s/@/\@/; open MAIL,"|$SENDMAIL -t -f $from" || &error("メール送信失敗・・・"); #print MAIL "From: mito\@ccad.sccs.chukyo-u.ac.jp\n"; #print MAIL "From: $from\n"; print MAIL "Subject: $subject\n"; print MAIL "To: $to\n"; print MAIL "\n"; print MAIL "$message\n"; close MAIL; } sub showPage{ print qq(Content-type: text/html;charset=Shift_JIS\n\n); print qq(<HTML><HEAD><TITLE>message</TITLE><BODY>); print @_[0]; print qq( 戻るボタン); print qq(</BODY></HTML>); } sub error{ print qq(Content-type: text/html;charset=Shift_JIS\n\n); print qq(<HTML><HEAD><TITLE>message</TITLE><BODY>); print @_[0]; print qq( 送信できません); print qq(</BODY></HTML>); exit(0); }