ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
Perl メール送信
日時: 2015/07/06 12:28
名前: lightbox



STDIO.PL(STandarD Input Output - Perl Library)

STDIO.PL は探したのですが、現在の配布場所をみつける事ができませんでした。
WEBアーカイブより、当時の概要は以下のようになります
簡単・便利・高機能〜CGIに便利な20種40個の関数

 STDIO.PL(STandarD Input Output - Perl Library)は、PerlでCGIのコーディングを行う際に便利な関数を集めたライブラリです。
 フォームデータのデコード処理、クッキー入出力、ファイルロック等は、ほとんどのCGIプログラムにおいて必要不可欠な処理です。
 例えば、電子メールをUNIXのメール送信プログラムである"sendmail"を使って送信する場合、sendmailへのパイプをオープンして出力という処理になりますが、日本語は文字コードを、JISへ変換する必要があります。さらに、日本語のヘッダはMIME標準エンコード、添付ファイルもBase64エンコード、UUエンコードする必要があります。電子メールの送信は、よく使われるものでありながら、自分でコーディングを書くのは面倒です。しかし、"stdio.pl"を使えば、たった一行で書くことができます。stdio.plはCGIプログラムの効率化に貢献します。

用途を問わず無料で使えるライセンスフリー

STDIO.PLはライセンスフリーのライブラリです。ライブラリ本体プログラム及びサンプルプログラムは商用・非商用、個人・法人を問わずに、すべて無料で利用(改造・再配布を含む)することができます。
↓必要なライブラリ( jcode.pl ) ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/
メンテナンス

SAKURA Internet で送信テスト( テキストメール ) ( No.1 )
日時: 2015/07/06 12:23
名前: lightbox


日時: 2015/07/06 12:23
名前: lightbox
Perl 5.8 : /usr/bin/perl 
sendmail : /usr/sbin/sendmail

stdop.pl PDF マニュアル

拡張子:
#! /usr/bin/perl

# stdio.plのパス
require 'stdio.pl';

# jcode.plのパス
require 'jcode.pl';

# sendmailのパス
$stdio::sendmail = '/usr/sbin/sendmail';

# テンポラリファイルを格納するディレクトリのパス
$stdio::tmp_dir = './';

# stdio.pl の入力関数( GET か POST かどちらか )
%in = ();
stdio::getFormData(\%in);

if ( $in{'send'} ne '' ) {
	%header = (
		'To'        => $in{'to'},
		'From'      => $in{'from'},
		'Subject'   => $in{'subject'},
		'X-Priority'=> '3',
		'X-Mailer'  => 'stdio.pl/9.10'
	);
	
	$result = stdio::sendmail(
		\%header,
		$in{'body'}

	);
	if ($result) {
		$message = "<p>メールの送信は成功しました。</p>\n";
	}
	else {
		$message = "<p>メールの送信は失敗しました。</p>\n";
	}
}

# **********************************************************
# 以下入力画面
# **********************************************************
print "Content-Type: text/html; charset=SHIFT_JIS\n";
print "\n";

print <<"_EOF_";
<HTML>
<HEAD>
<META http-equiv="Content-type" content="text/html; charset=Shift_JIS">
<TITLE>STDIO.PL メール送信テスト</TITLE>
<STYLE type="text/css">
* {
	font-family: "MS Pゴシック";
	font-size: 12px;
}
BODY {
	background-color: forestgreen;
	color: white;
}
</STYLE>
</HEAD>

<!-- *******************************************************
 BODY
******************************************************** -->
<BODY>

<!-- *******************************************************
 フォーム
******************************************************** -->
<FORM
	name="frmMain"
	method="GET"
>

件名 <INPUT type="text" name="subject" value="$in{'subject'}"><br>
宛先 <INPUT type="text" name="to" value="$in{'to'}"><br>
差出人 <INPUT type="text" name="from" value="$in{'from'}"><br>
本文 <TEXTAREA name="body" cols="80" rows="5">$in{'body'}</TEXTAREA><br>
<INPUT type="submit" name="send" value="送信">

</FORM>

$message

</BODY>
</HTML>
_EOF_
このアーティクルの参照用URLをクリップボードにコピー メンテナンス
SAKURA Internet で送信テスト( HTMLメール ) ( No.2 )
日時: 2015/07/06 12:31
名前: lightbox
HTML内の変数をパースさせないでいったん変数にセットし、必要に応じてパースさせて使用。

メールで送られる HTML は、その HTML そのものであるが、日本語が JIS に変換されるので、charset を iso-2022-jpに変更している
拡張子:
#! /usr/bin/perl

# stdio.plのパス
require 'stdio.pl';

# jcode.plのパス
require 'jcode.pl';

# sendmailのパス
$stdio::sendmail = '/usr/sbin/sendmail';

# テンポラリファイルを格納するディレクトリのパス
$stdio::tmp_dir = './';

%in = ();
stdio::getFormData(\%in);
# **********************************************************
# 以下入力画面
# **********************************************************
print "Content-Type: text/html; charset=SHIFT_JIS\n";
print "\n";

# 後でパースさせる為、シングルクォートで囲う。
# ファイルから単純に取り出しても良い 
$html = <<'_EOF_';
<HTML>
<HEAD>
<META http-equiv="Content-type" content="text/html; charset=$charset">
<TITLE>STDIO.PL メール送信テスト</TITLE>
<STYLE type="text/css">
* {
	font-family: "MS Pゴシック";
	font-size: 12px;
}
BODY {
	background-color: forestgreen;
	color: white;
}
</STYLE>
</HEAD>

<!-- *******************************************************
 BODY
******************************************************** -->
<BODY>

<!-- *******************************************************
 フォーム
******************************************************** -->
<FORM
	name="frmMain"
	method="GET"
>

件名 <INPUT type="text" name="subject" value="$in{'subject'}"><br>
宛先 <INPUT type="text" name="to" value="$in{'to'}"><br>
差出人 <INPUT type="text" name="from" value="$in{'from'}"><br>
本文 <TEXTAREA name="body" cols="80" rows="5">$in{'body'}</TEXTAREA><br>
<INPUT type="submit" name="send" value="送信">

</FORM>

$message

</BODY>
</HTML>
_EOF_

if ( $in{'send'} ne '' ) {
	%header = (
		'To'        => $in{'to'},
		'From'      => $in{'from'},
		'Subject'   => $in{'subject'},
		'X-Priority'=> '3',
		'X-Mailer'  => 'stdio.pl/9.10'
	);
	
	$charset="iso-2022-jp";
	&get_html( "main_html", $html );
	$result = stdio::sendmail(
		\%header,
		$in{'body'},
		$main_html

	);
	if ($result) {
		$message = "<p>メールの送信は成功しました。</p>\n";
	}
	else {
		$message = "<p>メールの送信は失敗しました。</p>\n";
	}
}

$charset = "Shift_JIS";
&get_html( "main_html", $html );

print $main_html;

# **********************************************************
# 文字列内変数適用関数
# **********************************************************
sub get_html {

	local($var_name,$var_data) = @_;
	local($buffer) = "\$$var_name = <<\"HTML_DATA\";\n";

	$buffer .= $var_data;

	$buffer .= "HTML_DATA";

	eval( $buffer );

}

このアーティクルの参照用URLをクリップボードにコピー メンテナンス
SAKURA Internet で送信テスト( 添付ファイルあり ) ( No.3 )
日時: 2015/07/06 12:32
名前: lightbox
以下では、キャッシュを使っている為のでカレントに c3RkaW8ucGRm.b64.cache のようなファイルがエンコードされた状態で保存されるので、もう一度同じファイルを使用する場合は処理短縮が可能。

※キャッシュはエンコード済みなので、オリジナルより大きいので注意。
※HTML 本文が空の場合は、そのパートは作成されない
※HTML を外部ファイルから取得する


削除は以下を実行する
拡張子:
stdio::removeCacheFiles("stdio.pdf");
ファイル名の拡張子より、getMimeType で判断される MIME が決定される。 もし無ければ、application/octet-stream
拡張子:
"stdio.pdf;;マニュアル.pdf;"
↑省略形

↓明示
"stdio.pdf;application/pdf;マニュアル.pdf;base64encode"
拡張子:
#! /usr/bin/perl

# stdio.plのパス
require 'stdio.pl';

# jcode.plのパス
require 'jcode.pl';

# sendmailのパス
$stdio::sendmail = '/usr/sbin/sendmail';

# テンポラリファイルを格納するディレクトリのパス
$stdio::tmp_dir = './';

%in = ();
stdio::getFormData(\%in);
# **********************************************************
# 以下入力画面
# **********************************************************
print "Content-Type: text/html; charset=SHIFT_JIS\n";
print "\n";

# **********************************************************
# 画面用 HTML を外部ファイルより取得
# **********************************************************
$html = "";
open(IN,"html.txt");
while (<IN>) {
	$html .= $_;
}
close(IN);

if ( $in{'send'} ne '' ) {
	%header = (
		'To'        => $in{'to'},
		'From'      => $in{'from'},
		'Subject'   => $in{'subject'},
		'X-Priority'=> '3',
		'X-Mailer'  => 'stdio.pl/9.10'
	);
	
	$charset="iso-2022-jp";
	&get_html( "main_html", $html );
	$result = stdio::sendmail(
		\%header,
		$in{'body'},
		"",
		"b64 cache",
		"stdio.pdf;application/pdf;マニュアル.pdf;base64encode"

	);
	if ($result) {
		$message = "<p>メールの送信は成功しました。</p>\n";
	}
	else {
		$message = "<p>メールの送信は失敗しました。</p>\n";
	}
}

stdio::removeCacheFiles("stdio.pdf");

$charset = "Shift_JIS";
&get_html( "main_html", $html );

print $main_html;

# **********************************************************
# 文字列内変数適用関数
# **********************************************************
sub get_html {

	local($var_name,$var_data) = @_;
	local($buffer) = "\$$var_name = <<\"HTML_DATA\";\n";

	$buffer .= $var_data;

	$buffer .= "HTML_DATA";

	eval( $buffer );

}

↓HTML 定義
拡張子:
<HTML>
<HEAD>
<META http-equiv="Content-type" content="text/html; charset=$charset">
<TITLE>STDIO.PL メール送信テスト</TITLE>
<STYLE type="text/css">
* {
	font-family: "MS Pゴシック";
	font-size: 12px;
}
BODY {
	background-color: forestgreen;
	color: white;
}
</STYLE>
</HEAD>

<!-- *******************************************************
 BODY
******************************************************** -->
<BODY>

<!-- *******************************************************
 フォーム
******************************************************** -->
<FORM
	name="frmMain"
	method="GET"
>

件名 <INPUT type="text" name="subject" value="$in{'subject'}"><br>
宛先 <INPUT type="text" name="to" value="$in{'to'}"><br>
差出人 <INPUT type="text" name="from" value="$in{'from'}"><br>
本文 <TEXTAREA name="body" cols="80" rows="5">$in{'body'}</TEXTAREA><br>
<INPUT type="submit" name="send" value="送信">

</FORM>

$message

</BODY>
</HTML>
このアーティクルの参照用URLをクリップボードにコピー メンテナンス