вложение почтового файла wp не помещается в папку загрузки?
У меня есть форма, в которой я хочу, чтобы пользователи могли выбирать изображение для загрузки. Изображение временно загружается в папку wp-content/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 answers
Вложения всегда должны использовать абсолютный путь к файловой системе.
Также для изменения 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 применялся только к этому электронному письму.
Источники:
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 );