development_creative

この記事は1年以上経過しています。

【WordPress】プラグインなし!自作フォームでメールに画像を添付して送信したい

メールフォームに、ファイルを添付する機能の作り方を探してませんか?

この記事では、PHPを使用して、フォームからアップロードされたファイルを
メールに添付して送信する手順についてご紹介します。
(フォーム自体はできている)

ファイルのアップロード

ファイルのアップロードを行うために、以下のコードをフォーム内のheaderタグの下に記述します。

define( "FILE_DIR", '/任意のディレクトリパス' );

if( !empty($_FILES['imageUpload']['tmp_name']) ) {
    $upload_res = move_uploaded_file( $_FILES['imageUpload']['tmp_name'], FILE_DIR.$_FILES['imageUpload']['name']);
    if( $upload_res !== true ) {
        $error[] = 'ファイルのアップロードに失敗しました。';
    } else {
        $clean['imageUpload'] = $_FILES['imageUpload']['name'];
    }
}

それでは内容を見てみましょう

define( "FILE_DIR", '/任意のディレクトリパス' );

こちらはファイルのアップロードを行うために、define 文を使用してファイルの保存ディレクトリを
設定しています。実際にサーバーに存在するディレクトリを指定するようにしてください。

if( !empty($_FILES['imageUpload']['tmp_name']) ) {

if文で$_FILES にファイルがアップロードされたかどうかを確認します。

$upload_res = move_uploaded_file( $_FILES['imageUpload']['tmp_name'], FILE_DIR.$_FILES['imageUpload']['name']);

この行は、move_uploaded_file 関数を使用してファイルを一時ディレクトリから
サーバー内の指定されたディレクトリに移動し、ファイル名を保持します。

if( $upload_res !== true ) {
    $error[] = 'ファイルのアップロードに失敗しました。';
} else {
    $clean['imageUpload'] = $_FILES['imageUpload']['name'];
}

この部分は、ファイルのアップロード結果をチェックし、成功した場合は clean 配列に
アップロードされたファイルの名前を保持します。
アップロードに失敗した場合、$error 配列にメッセージを入れます。

ファイル添付とメール送信

あとは以下のコードを使用して、アップロードしたファイルを添付してメールを送信します。

/**
 * フォームデータを処理し、ファイルを添付してメールを送信する関数
 *
 * @param array $posts //フォームから受け取ったデータ
 * @param string $type //メールの種類 ('studio', 'ad', 'permissionImg' など)
 * @return array //送信結果を表す連想配列 (code, message など)
 */
function PostMail($posts, $type)
{
    // ファイルのアップロード処理
    $uploadDir = '/任意のディレクトリパス';
    $filename = $uploadDir . $_FILES['imageUpload']['name'];
    $upload_res = move_uploaded_file($_FILES['imageUpload']['tmp_name'], $filename);
    $attachments = array($filename);

    // メール送信処理
    wp_mail($to, $subject, $message, $headers = '', $attachments);
    // ...

    // 送信結果を返す
    if (!$mailResult) {
        return [
            'code' => 101,
            'message' => 'メールの送信に失敗しました。お手数ですがもう一度お試しください。'
        ];
    } else {
        // 成功
        return [
            'code' => 200,
            'message' => '申込が完了しました。'
        ];
    }
}

こちらはサーバーに添付された画像を指定ディレクトリに溜めていくことになるので
随時メンテナンスは必要になりますのでご注意ください。
パンパンになるほど問い合わせが来て困るって状態も贅沢なものですけどね。

プラグインを使わずにメールフォームを作ったはいいけどもファイルを上手く添付できない。。。
どうやってやればいいんだ!わかんねぇ!ってなってる人の参考になれば幸いです。ではでは

Related ariticle

関連記事

TOP