|
以下のような内容になりました。いろいろテストしたので大丈夫だと思いますが、
テストよろしくお願いします。コピペして実行してみてほしいです。
----------------------------------------------------------------------------
// 差し込みメール生成.mac
//
// version 1.01
//
// version 1.00 = 2013.12.20 by 秀まるお, 有限会社サイト−企画
// version 1.01 = 2016.06.16 「あとで送信」でエラーになった場合対応。
// hidesoft.8:00038| 差し込みメール生成マクロ誤動作?
// version 1.02 = 2018.01.18 カラム10以上がうまく変換されないバグ修正。
// turukame.5:00548| 差し込みメール生成マクロでカラムが10以上
ある場合に「>」が残
// version 1.03 = 2020.08.03
// HTMLメール対応。HTML形式の場合は"<<カラム1>>"
のような形でも文字列検索する。
// 画像入りHTMLメールにも対応。
// 添付ファイルにも対応。
// version 1.04 = 2021.05.20
// turukame.5:00580| 差し込みメール生成マクロv1.03 添付ファイル
// X-Attach: <<カラム2>> のように記述して1通毎に別々の添付フ
ァイルを添付できるようにする。
//
// このマクロは、CSV形式ファイルからメールアドレスその他の情報を取得して、そ
れを元にメールを作成する
// マクロです。
// 差し込み印刷のメール版になります。
//
// このマクロの改造は自由です。
// このマクロを参考にして何か別のマクロを作成されてもまったく問題ないです。
許可を取っていただく必要も
// 無いし、copyright表示などもしなくていいです。
//
//
//
//
setcompatiblemode 0x20000; //検索文字列を自動で元に戻す。
loaddll "tkinfo.dll";
if( dllfunc("IsHidemaruMailMain") || dllfunc("IsHidemaruMailGrep") ) {
message "このマクロは「新規メール」で作成したエディタ・ウィンドウ上
で実行してください。(続けてヘルプを表示します)";
call Sub_Help;
endmacro;
}
if( ! dllfunc("IsFunctionExist", "tkinfo.dll", "CSV_LoadFile") ) {
message "秀丸メールのバージョンが古いのでこのマクロは使えません。\n\
n秀丸メールのバージョンは、6.19β15以上でないとダメです。";
endmacro;
}
//HTMLメールかどうか調べる。
#htmlMode = 0;
$contenttype = dllfuncstr("CurrentHeader","Content-Type");
if( strstr( dllfuncstr("ToLower", $contenttype), "text/html" ) >= 0 ) {
#htmlMode = 1;
}
//HTML編集アドインが動作中かどうか調べる。
#htmlEdit = 0;
if( #htmlMode && dllfunc("IsHtmlMailViewerVisible") ) {
#htmlEdit = 1;
#n = dllfunc("HtmlEdit", "offonly");
}
//2021.05.20 X-Attach: <<カラムn>>指定対応。
#attachcount = dllfunc("CountCurrentHeader", "X-Attach");
#csvattachcount = 0; //カラム指定したX-Attach:ヘッダの数
#preattachcount = 0; //元々の添付ファイルの数
if( #attachcount != 0 ) {
##i = 0;
while( ##i < #attachcount ) {
$$attach = dllfuncstr("CurrentHeader2", "X-Attach", ##i);
if( leftstr( $$attach, 2 ) == "<<" ) {
//X-Attach: <<カラムn>>指定の場合
$csvattach[#csvattachcount] = $$attach;
#csvattachcount = #csvattachcount + 1;
} else {
$preattach[#preattachcount] = dllfuncstr("HomeDir") + dllfun
cstr("CurrentAccount") + "\\" + $$attach;
#preattachcount = #preattachcount + 1;
}
##i = ##i + 1;
}
}
Label_Restart: ;
menu "差し込みメールの生成の実行!(CSVファイルの選択...)",
"\x01",
"ヘルプ",
"サンプルメールの作成";
if( result == 0 ) {
endmacro;
} else if( result == 3 ) {
//ヘルプ
call Sub_Help;
goto Label_Restart;
} else if( result == 4 ) {
//サンプルメール作成
#n = dllfunc("NewMail");
#n = dllfunc("SetHeader", "To", "<<カラム1>>");
#n = dllfunc("SetHeader", "Subject", "案内メールサンプル");
gofiletop;
beginsel;
gofileend;
delete;
insertfix "差し込みメールのサンプルです。\n\n <<カラム2>> 様へ\n\n
ご案内…\n\n添付ファイルをCSVファイルから指定したい場合は、ヘッダと本文の
区切りの空行にに無理矢理「X-Attach: <<カラムn>>」のように記述してください。\n";
searchdown "<<カラム[0-9]+>>", regular, nocasesense, hilight;
gofiletop;
endmacro;
}
setcompatiblemode 0x0200;
#columnusemax = 0;
#ytop = screentopy;
disabledraw;
#x = x; #y = y;
moveto 0, -9999;
while(1) {
if( #htmlMode ) {
searchdown "(<<|<<)カラム([0-9]+)(>>|>>)(?\\2)", reg
ular;
} else {
searchdown "<<カラム([0-9]+)>>(?\\1)", regular;
}
if( !result ) {
break;
}
#columnuse = val( gettext( seltopx, seltopy, selendx, selendy ) );
if( #columnuse == 0 ) {
moveto #x, #y;
enabledraw #ytop;
message "カラム番号0が指定されていますが、カラム番号は1以上を指
定する必要があります。(一番左のカラムが1となります)";
endmacro;
}
if( #columnuse > #columnusemax ) {
#columnusemax = #columnuse;
}
}
moveto 0, -9999;
searchdown "^To:.*<<カラム([0-9]+)>>", regular, nocasesense;
if( !result) {
moveto #x, #y;
enabledraw #ytop;
message "To:ヘッダの中には、<<カラムn>>が必ず入ってないといけないで
す。(nはカラム番号、1〜)";
endmacro;
}
moveto #x, #y;
enabledraw #ytop;
if( #columnusemax <= 0 ) {
message "現在のメールにはCSV形式ファイルから差し込みする用の「<<カラ
ムn>>」のような部分が存在しないです。(nは番号, 1〜)\n\nヘルプを表示します。";
call Sub_Help;
endmacro;
}
moveto 0, -9999;
#xsel = x; #ysel = y;
beginsel;
gofileend;
$template = gettext( #xsel, #ysel, x, y );
$filename = dllfuncstr("Bypass_GetOpenFileName", "差し込み用CSVファイル
の指定", "*.csv");
if( $filename == "" ) {
endmacro;
}
#n = dllfunc("CSV_LoadFile", $filename );
if( #n == 0 ) {
#error = dllfunc("Bypass_GetLastError");
message "CSVファイルの読み込みに失敗したか、または中身が空っぽです。
\n\n" +
"ファイル名 = " + $filename + "\n" +
"エラーコード = " + str(#error) + "\n" +
"ファイルサイズ = " + dllfunc("Bypass_GetFileSize", $filenam
e );
endmacro;
}
#line = dllfunc("CSV_GetLineCount");
if( #line >= 1000 ) {
question "指定されたCSVファイルには " + str(#line) + " 行のデータが
含まれています。大量のメールを送信すると、特定電子メール法に違反する恐れがあ
ったり、プロバイダーさんの方でメール発信が規制されたり、メールアカウントが停
止させられたりする恐れがあります。\n\n" +
"その点十分注意が必要です。\n\n" +
"かまわずに続行しますか?";
if( result != yes ) {
endmacro;
}
}
#columnmax = dllfunc("CSV_GetMaxColumnCount");
if( #columnusemax > #columnmax ) {
question "メールの中で使われてるカラム番号が、実際のCSVファイルの中
に存在するカラム数を超えています。かまわずに続行しますか?\n\n" +
"メールの中で使われてるカラム番号の最大 = " + str(#columnusemax)
+ "\n" +
"CSVファイル中のカラム番号の最大 = " + str(#columnmax);
if( result != yes ) {
endmacro;
}
}
#templatehandle = hidemaruhandle(0);
#mailcount = 0;
while(1) {
#n = dllfunc("NewMail");
if( $contenttype != "" ) {
#n = dllfunc("SetHeader", "Content-Type", $contenttype);
}
//disabledraw;
moveto 0, -9999;
beginsel;
gofileend;
delete;
insertfix $template;
//2021.05.20 X-Attach: <<カラムn>>指定対応。
if( #preattachcount != 0 || #csvattachcount != 0 ) {
//既存のX-Atach:ヘッダを削除する
moveto 0, -9999;
while(1) {
searchdown2 "^X-Attach:", regular, nocasesense;
if( !result ) {
break;
}
if( y >= 0 ) {
break;
}
golinetop2;
moveto 0, y;
beginsel;
golineend2;
right;
delete;
}
moveto 0, -9999;
}
#n = dllfunc("SetHeader", "X-Mailer", "SashikomiMacro V1.03 (on Hide
maruMail)");
#n = dllfunc("SetHeader", "Precedence", "bulk");
//2021.05.20 X-Attach: <<カラムn>>指定対応。
if( #preattachcount != 0 ) {
##i = 0;
while( ##i < #preattachcount ) {
#n = dllfunc("AddAttach", $preattach[##i] );
##i = ##i + 1;
}
}
if( #csvattachcount != 0 ) {
##i = 0;
while( ##i < #csvattachcount ) {
$$column = midstr( $csvattach[##i], 8 );
##tail = strstr( $$column, ">>" );
if( ##tail > 0 ) {
$$column = leftstr( $$column, ##tail );
}
#columnnum = val($$column);
if( #columnnum >= 1 ) {
#columnnum = #columnnum - 1;
$text = dllfuncstr("CSV_GetColumnText", #columnnum);
#n = dllfunc("AddAttach", $text );
}
##i = ##i + 1;
}
}
while(1) {
if( #htmlMode ) {
searchdown2 "(<<|<<)カラム([0-9]+)(>>|>>)(?\\2)",
regular;
} else {
searchdown2 "<<カラム([0-9]+)>>(?\\1)", regular;
}
if( !result ) {
break;
}
#columnnum = val( gettext( seltopx, seltopy, selendx, selendy ) );
#columnnum = #columnnum - 1;
if( selecting ) {
escape;
}
//2021.05.20 X-Attach:ヘッダの中は無視する
if( dllfuncstr("ToLower", gettext( 0, y, 9, y ) ) == "x-attach:"
) {
golineend2;
continue;
}
if( #htmlMode ) {
searchup "(<<|<<)カラム([0-9]+)(>>|>>)", regular;
} else {
searchup "<<カラム([0-9]+)>>", regular;
}
if( !result ) {
message "おかしい???";
break; //おかしい
}
delete;
$text = dllfuncstr("CSV_GetColumnText", #columnnum);
if( #htmlMode != 0 && lineno > 0 ) {
$text = dllfuncstr("PlainTextToHtml", $text); //HTML
メール対応。
}
insert $text;
}
#n = dllfunc("SendLater");
if( #n != 0 ) {
#mailcount = #mailcount + 1;
} else {
question "「あとで送信」に失敗しました。マクロを中断しますか?";
if( result == yes ) {
break;
}
}
#handle = hidemaruhandle(0);
setactivehidemaru #templatehandle;
closehidemaruforced #handle;
#n = dllfunc("CSV_SkipOneLine");
if( #n == 0 ) {
break;
}
}
message str(#mailcount) + " 通のメールを未送信フォルダに生成しました。";
if( #htmlEdit ) {
#n = dllfunc("HtmlEdit");
}
endmacro;
endmacro;
Sub_Help:
message "「差し込みメール生成」マクロのヘルプ:\n\n" +
"このマクロは、一般的な文書作成ソフトにある差し込み印刷のような
感じでメールを生成する用のマクロです。差し込ませる用のメールとCSVファイルか
ら,CSVファイルの行数分のメールを簡単に生成させることが出来ます。\n\n" +
"マクロを実行するためには、まずは差し込ませる用のCSVファイルを作
成し、テンプレート用となるメールを「新規メール」コマンドで作成し、そのメール
上でマクロを実行する形になります。\n\n" +
"メールの作成方法:\n" +
" メールの中に、\"<<カラム1>>\"のような形で差し込み用CSVファイ
ルの列の番号を指定すると、その位置に、CSVファイルの指定されたカラムの内容が
挿入されます。例えばTo:ヘッダに1列目の内容を入れたい場合は、To:ヘッダの所に
\"<<カラム1>>\"を入れておけばいいです。\n\n" +
"カラムの番号は、一番左の列が<<カラム1>>で、次が<<カラム2>>、の
ようになります。\n\n" +
"そのような形式でメールを作成して、あとはマクロを実行してCSVファ
イルのファイル名を指定すれば、差し込まれたメールが未送信フォルダに生成されま
す。\n\n" +
"テンプレート用のメールの例:\n" +
"From: xxxx\n" +
"To: <<カラム1>>\n" +
"Subject: ご案内\n" +
"\n" +
" <<カラム2>>さんこんにちは\n" +
"\n\n" +
"(上記例だと、CSVファイルの1カラム目にメールアドレス、2カラム
目に相手の名前が入ってる)\n\n" +
" テンプレート用として作成したメールの内容を取っておきたい時は、
草稿フォルダに保存しておくか、または「ファイル・テンプレートとして保存」でテ
ンプレートとして保存しておくのがお勧めです。";
message "注意:\n\n" +
"このマクロを使うと大量のメールを簡単に作成できてしまうのですが、
大量のメールを送信すると、「特定電子メール法」に違反する恐れが出てきます。法
に触れるような行為が無かったとしても、いわゆる迷惑メールを大量に発信してると
勘違いされて、以後、ご自身のパソコンからのメールの発信が規制されたり、メール
アカウントが停止させられたりする恐れがあります。\n\n" +
"特に無料のメールアカウントから大量のメールを発信すると、メール
アカウントが無効化されてしまって使えなくなる恐れがあります。\n\n" +
"その点ご注意ください。";
return;
|
|