web-dev-qa-db-ja.com

wp_mail添付ファイルがアップロードフォルダに配置されていませんか?

ユーザーがアップロードする画像を選択できるようにするフォームがあります。画像は一時的にwp-content/uploadsフォルダにアップロードされ、電子メールに添付されてから破棄されます。

今、フォームが送信されていて、画像がレスポンスヘッダーで処理されていますが、電子メールに画像が含まれておらず、uploadsフォルダに画像ファイルがありません。誰かがこのコードに関する何か問題を見ますか?

これがフォームです:

<form id="shareForm" action="<?php echo get_template_directory_uri(); ?>/library/file-form.php" method="post" enctype="multipart/form-data">
    <input type="text" id="name" name="name" placeholder="Name" />
    <textarea rows="4" cols="50" name="message" id="message" placeholder="Message"></textarea>
    <input type="file" id="photo" name="photo" class="upload">
    <input type="submit" name="submit" value="Submit">
</form>

これが私のPHPメールスクリプトです。

<?php
    require( '../../../../wp-load.php' );

if(isset($_POST["name"])){

    $name = $_POST["name"];
    $message = $_POST["message"];

    $fName = str_replace(array(' ', ',', '\'' ), '-');

    $date = new DateTime(null, new DateTimeZone('America/Chicago'));
    $myDate = $date->format("m/d/Y H:i");
    $fileDate = $date->format("m-d-Y");
    $homeUrl = home_url('/');

    if($_FILES["file"]["type"] != ""){

        $allowedExts = array("jpg", "png", "gif");
        $extension = end(explode(".", $_FILES["file"]["name"]));
        $newFileName = $fName . $fileDate."." .$extension;

        if ($_FILES["file"]["error"] > 0) {
            $myPath =  $homeUrl . 'share/?upload=error';
            wp_redirect($myPath); exit;     

        } else {
            move_uploaded_file($_FILES["file"]["tmp_name"], WP_CONTENT_DIR . "/uploads/user-submitted/" . $newFileName);
        }

    }

    $to = '[email protected]';
    $subject = $fName . " submitted a photo";

    $message = "Date: " . $myDate . " EST \n";
    $message .= "Message:  " .$message. "\n";

    $attachments = array(WP_CONTENT_DIR . "/uploads/user-submitted/".$newFileName); 
    $headers[] = 'From: Photo Submissions <[email protected]>';

    wp_mail( $to, $subject, $message, $headers, $attachments);

    unlink(WP_CONTENT_DIR . "/uploads/user-submitted/" . $newFileName);

    $myPath =  $homeUrl . 'share/?upload=success';
    wp_redirect($myPath); 
    exit;   

}

?>
1
user13286

添付ファイルは常に絶対ファイルシステムパスを使うべきです。

また、電子メールのContent-Typeを変更するには、wp_mail_content_typeフィルタを使うべきです。

<?php
function my_custom_email() {
    $to  = '[email protected]';
    $subject = 'WordPress wp_mail';
    $message = '
    <html>
    <body>
        <table rules="all" style="border-color: #666;" cellpadding="10">
          <tr>Hello WordPress</tr>
        </table>          
    </body>
    </html>
    ';

    $attachments = array(  WP_PLUGIN_DIR . '/my-plugin/uploads/sample_photo_01.jpg' );
    $headers[] = 'From: '.get_option( 'blogname' ).' <'.get_option( 'admin_email' ).'>';
    add_filter( 'wp_mail_content_type', 'my_custom_email_content_type' );
    return wp_mail( $to, $subject, $message, $headers, $attachments );
}

function my_custom_email_content_type() {
    return 'text/html';
}

Wp_mail_content_typeフィルターがこのEメールにのみ適用されるように、コード全体を関数に入れました。

出典:

http://codex.wordpress.org/Function_Reference/wp_mail

http://codex.wordpress.org/Plugin_API/Filter_Reference/wp_mail_content_type

またはこのコードを試すことができます

 $attachments = array( WP_CONTENT_DIR . '/uploads/file_to_attach.Zip' );
   $headers = 'From: My Name <[email protected]>' . "\r\n";
   wp_mail('[email protected]', 'subject', 'message', $headers, $attachments );
0
TBI Infotech