fake sendmail for windows を使って、PHP でごく普通に( mb_send_mail で )メール送信

fake sendmail は、XAMPP に同梱されています

メールサーバは、フリーメールで可能で、簡単な設定で利用できます。以下のサンプルは、さくらインターネット で動作確認しました。

▼ 手順

🔴 ダウンロード

配布元より、sendmail.zip をダウンロードして、解凍します。
( XAMPP には sendmail フォルダがあります )

🔴 sendmail.exe の動作テスト

まず、sendmail.ini をエディタで開いて、四つのエントリを指定します
▼ さくらインターネットを使う場合の設定

smtp_server=初期ドメイン
smtp_port=587
auth_username=ユーザ@初期ドメイン
auth_password=パスワード

※ smtp_ssl=auto となっており、デフォルトで ssl で実行され、使え無い場合は TLS を使おうとします

🔴 php.ini の設定

sendmail_path = "C:\tools\sendmail\sendmail.exe"

実際の sendmail.exe のパスを “” で囲んで指定します。
※ この場合、エラーログは “C:\tools\sendmail\error.log” です( デフォルト )

🔴 PHP のコード ( UTF8 BOM なしで記述します )

HTML の input 要素で type=”text” name=”fld_to”、name=”fld_subject”、name=”fld_body”、を form 要素の中に記述し、form 要素に method=”post” action=”以下の PHP のファイルのパス” を指定し、form 要素の中に input 要素で type=”submit” を指定したボタンを記述します。

mb_language("Japanese");
mb_internal_encoding("UTF-8");

$from_header = "From: " . mb_encode_mimeheader( mb_convert_encoding("差出人","iso-2022-jp") );

$from_header .= " <{$GLOBALS["mail"]}>";

$result = mb_send_mail($_POST["fld_to"], $_POST["fld_subject"], $_POST["fld_body"], $from_header);
if ( $result ) {
	$error = "OK";
}
else {
	$error = "ERROR";
}

print mb_language() . "
"; print $error;

$GLOBALS[“mail”] は、メール形式であれば良いですが、通常ならば auth_username で指定したメールアドレスを記述します。

PHP, 記録

VBScript( Jscript ) を『管理者として実行する』には、Shell の runas ( 右クリックメニューの実行と同等 ) で実現

VBScript を『管理者として実行する』には、以下の内容ををスクリプトの先頭に記述します

🔻 VBScript

Set obj = Wscript.CreateObject("Shell.Application")
if Wscript.Arguments.Count = 0 then
	obj.ShellExecute "wscript.exe", WScript.ScriptFullName & " runas", "", "runas", 1
	Wscript.Quit
end if

Wscript.Echo "ここは管理者権限で実行されます"

🔻 Jscript

※ Jscript は WScript 等、大文字小文字の区別があるので注意です。
var obj = new ActiveXObject("Shell.Application");
if ( WScript.Arguments.length == 0 ) {
	obj.ShellExecute( "wscript.exe", WScript.ScriptFullName + " runas", "", "runas", 1 );
	WScript.Quit();
}

WScript.Echo( "ここは管理者権限で実行されます" );

Shell.ShellExecute method

これは、VBScript から利用可能な Shell の機能を使って、右クリックメニューにある『管理者として実行』を実行する方法です。ここでは日本語では無く runas と言う文字列を使って管理者として実行させています。

但し、引数がなかった場合の処理としては処理終了します。ですからこのスクリプトでは、引数をダミーで一つセットして( この場合一つめの runas がそうです )自分自身を再度呼び出しています。

つまり、Windows からすれば二度目の実行が管理者としての実行になります。

この場合は、スクリプトに引数を渡す事ができません。もし渡したい場合は、違ったトリックを使う必要があるのに注意して下さい。(その場合は、外部ファイルから入力するのがもっとも簡単で確実だと思います)




TCPDF をダウンロードして、Windows の任意のフォルダで TCPDF 同梱のサンプルを実行する為の設定

2024/08/04 時点で 6.7.5

テスト環境

❶ Windows11 64ビット + XAMPP  8.2.12 + php ( 8.2.12 )
❷ TCPDF ( C:\app\TCPDF-main として解凍 )

テスト内容

TCPDF-main.zip を解凍すると、TCPDF-main\examples というフォルダがあり、そこにサンプルが沢山ありますが、それを他のフォルダでも同様に動作させます。

手順

❶ example フォルダを全て 任意のフォルダにコピー( アプリの実行環境になります )
❷ そのフォルダを XAMPP で、PHP が動作するようにする
❸ tcpdf_include.php を以下のように書き換える
( set_include_path までを先頭に、require_once('tcpdf.php'); は追加、または全部以下に書き換え )
<?php
$path = "/app/TCPDF-main";
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
require_once('config/tcpdf_config_alt.php');
require_once('tcpdf.php');
?>

barcodes は、tcpdf_barcodes_1d_include.php と tcpdf_barcodes_2d_include.php の
中身の配列の参照パスの一つを realpath('/app/TCPDF-main/tcpdf_barcodes_1d.php')
のように変更すれば動作します( tcpdf_barcodes_2d_include.php も同じ )
// Include the TCPDF 1D barcode class (search the class on the following directories).
$tcpdf_barcodes_1d_include_dirs = array(
    realpath(dirname(__FILE__) . '/../../tcpdf_barcodes_1d.php'),// True source file
	realpath('/app/TCPDF-main/tcpdf_barcodes_1d.php'),// Relative from $PWD
	'/usr/share/php/tcpdf/tcpdf_barcodes_1d.php',
	'/usr/share/tcpdf/tcpdf_barcodes_1d.php',
	'/usr/share/php-tcpdf/tcpdf_barcodes_1d.php',
	'/var/www/tcpdf/tcpdf_barcodes_1d.php',
	'/var/www/html/tcpdf/tcpdf_barcodes_1d.php',
	'/usr/local/apache2/htdocs/tcpdf/tcpdf_barcodes_1d.php'
);


フォントの追加は、tcpdf_addfont.php で作成したフォントファイルを fonts フォルダにコピーします。
埋め込み : c:\php\php tcpdf_addfont.php -t TrueTypeUnicode -f 32 -i xxxxxxxx.ttf 非埋め込み : c:\php\php tcpdf_addfont.php -t CID0JP -f 32 -i xxxxxxxx.ttf -t は省略すると フォントファイルをチェックして通常は TrueTypeUnicode になり、-f は省略すると 32 です。 ※ -b を指定すると、character bounding box の情報を php のフォントファイルに書き込みます( If true includes the character bounding box information on the php font file. )
OTF から TTF の変換はこちらから