メール送信アプリ

<?php
/*
Plugin Name: Simple Mailer Plus
Description: セキュリティ強化・自動返信+DB保存付きシンプルなメール送信プラグイン
Version: 2.1
Author: matsumo333
*/

define(‘SM_FROM_EMAIL’, ‘info@matsumo333.xsrv.jp’);
define(‘SM_RECAPTCHA_SITE_KEY’, ‘ ‘;
define(‘SM_RECAPTCHA_SECRET_KEY’, ‘ ‘);

// =============================================
// 1️⃣ プラグイン有効化時にテーブルを作成
// =============================================
register_activation_hook(FILE, ‘sm_create_db_table’);
function sm_create_db_table() {
global $wpdb;
$table_name = $wpdb->prefix . ‘simple_mailer_messages’;
$charset_collate = $wpdb->get_charset_collate();

$sql = "CREATE TABLE IF NOT EXISTS $table_name (
    id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL,
    message TEXT NOT NULL,
    recaptcha_score FLOAT DEFAULT 0,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
) $charset_collate;";

require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);

}

// =============================================
// 2️⃣ フォームの表示と送信処理
// =============================================
function sm_display_form() {
$html = ”; $html .= wp_nonce_field(‘sm_send_mail’, ‘sm_nonce’, true, false); $html .= ‘ ‘;

// reCAPTCHA スクリプト
$html .= '
<script src="https://www.google.com/recaptcha/api.js?render=' . SM_RECAPTCHA_SITE_KEY . '"></script>
<script>
    grecaptcha.ready(function() {
        grecaptcha.execute("' . SM_RECAPTCHA_SITE_KEY . '", {action: "submit"}).then(function(token) {
            document.getElementById("sm_token").value = token;
        });
    });
</script>';

// ===== 送信処理 =====
if (isset($_POST['sm_submit']) && isset($_POST['sm_nonce']) && wp_verify_nonce($_POST['sm_nonce'], 'sm_send_mail')) {

    // reCAPTCHA 検証
    $token = sanitize_text_field($_POST['sm_token']);
    $response = wp_remote_get("https://www.google.com/recaptcha/api/siteverify?secret=" . SM_RECAPTCHA_SECRET_KEY . "&response=" . $token);
    $result = json_decode(wp_remote_retrieve_body($response), true);
    $score = isset($result['score']) ? floatval($result['score']) : 0;

    if (empty($result['success']) || $score < 0.5) {
        return '<div style="color:red;">スパムの可能性があるため送信できませんでした。</div>';
    }

    // フォームデータの整形
    $name = sanitize_text_field($_POST['sm_name']);
    $email = sanitize_email($_POST['sm_email']);
    $message = sanitize_textarea_field($_POST['sm_message']);

    // ===== ① データベースへ保存 =====
    global $wpdb;
    $table_name = $wpdb->prefix . 'simple_mailer_messages';
    $wpdb->insert(
        $table_name,
        array(
            'name' => $name,
            'email' => $email,
            'message' => $message,
            'recaptcha_score' => $score
        ),
        array('%s', '%s', '%s', '%f')
    );

    // ===== ② メール送信 =====
    $to = get_option('admin_email');
    $subject = "【お問い合わせ】from {$name}";
    $body = "名前: {$name}\nメール: {$email}\n\nメッセージ:\n{$message}";
    $headers = array(
        "From: お問い合わせフォーム <" . SM_FROM_EMAIL . ">",
        "Reply-To: {$email}"
    );

    // 自動返信メール
    $user_subject = "【自動返信】お問い合わせありがとうございます";
    $user_body = "{$name} 様\n\nこの度はお問い合わせありがとうございます。\n以下の内容で受け付けました。\n\n---\n{$message}\n---\n\n担当者より折り返しご連絡いたします。\n\n----------------------------------\nFood Science 運営\n" . home_url() . "\n----------------------------------";
    $user_headers = array("From: Food Science <" . SM_FROM_EMAIL . ">");

    $admin_sent = wp_mail($to, $subject, $body, $headers);
    $user_sent = wp_mail($email, $user_subject, $user_body, $user_headers);

    if ($admin_sent && $user_sent) {
        $html .= '<div style="color: green;">メールを送信し、データを保存しました。ありがとうございます!</div>';
    } else {
        $html .= '<div style="color: red;">送信に失敗しました。</div>';
    }
}

return $html;

}
add_shortcode(‘simple_mail_form’, ‘sm_display_form’);

\ 最新情報をチェック /

コメント

PAGE TOP
タイトルとURLをコピーしました