PHPでメール送信するコマンドmb_send_mail()関数をめも。
mb_send_mail() <?php mb_language("Japanese"); mb_internal_encoding("UTF-8");
mb_send_mail( string $to, // 送信先アドレス string $subject, // タイトル string $message, // 本文 string $headers, // 送信元アドレス string $pform //Return-Path ); ?>
HTMLのサンプルコードを解説した以下のサイトが具体的で分かりやすく、mb_language() を日本語に mb_internal_encoding() をUTF-8に設定して、 $headers と $pform に送信元アドレスとReturn-Pathをそれぞれ指定するとフォームからメール送信できました。
誰でも実装できる!PHPでメール送信を行う方法【初心者向け】現役エンジニアが解説
mailform.html
<html>
<head>
<meta charset="utf-8" />
<script type="text/javascript" charset="UTF-8"></script>
</head>
<body>
<form action="./confirm.php" method="post">
<p>受信者</p><input type="text" name="to">
<p>タイトル</p><input type="text" name="title">
<p>本文</p><textarea name="content" cols="50" rows="5"></textarea>
<p><input type="submit" name="send" value="送信"></p>
</form>
</body>
</html>
confirm.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<?php
mb_language("Japanese");
mb_internal_encoding("UTF-8");
$to = $_POST['to'];
$title = $_POST['title'];
$content = $_POST['content'];
$headers = 'From: testuser@smtp.example.com';
if(mb_send_mail($to, $title, $content, $headers, '-f' . 'testuser@smtp.example.com')){
echo "メールを送信しました";
} else {
echo "メールの送信に失敗しました";
};
?>
</body>
</html>
それでも届かないときはメールだけに滅入ることもありますが、そんなときは postfix main.cf, php.ini の次のSMTP設定(意味深)を確認すると良いかもしれません。
/etc/postfix/main.cf
mail_owner = postfix
setgid_group = postdrop
myhostname = localhost.localdomain # お使いのsmtpサーバー
compatibility_level = 2
php.ini
from="testuser@smtp.example.com"
SMTP=smtp.example.com
smtp_port=465