Intereting Posts

wp_mail Не работает правильно

Я пытаюсь использовать wp_mail для отправки электронной почты с вложением, но есть несколько проблем:

1) Вложение не появляется
2) Я должен использовать прямой URL для отправки электронной почты (не работая над кнопкой)
3) Имена переменных для динамического текста по электронной почте не работают.

Код можно найти ниже, этот код охватывает внешний интерфейс (добавленный с помощью короткого кода) и материал «бэкэнда», который якобы отправляет электронное письмо.

Просто хедз-ап, многие из этого кода не имеют отношения к проблеме (просто пытаясь быть тщательным), это внешние бит (shortcoded bits):

function file_download(){ ob_start(); ?> <style> .downloadHolder { background: #181D25; box-shadow: inset 0 0 42px 0 rgba(100,100,100,0.1); margin: 0 0 2.5rem 0; padding: 40px 40px; text-shadow: 0 1px 1px #000000; text-align: center; } .downloadBtn { background-color: #005dac; background-image: -webkit-linear-gradient(top,#0077b3,#0036a3 100%); background-image: linear-gradient(to bottom,#0077b3,#0036a3 100%); color: #fff; text-decoration: none; border-radius: 3px; border: 1px solid; box-shadow: inset 0 1px 0 rgba(255,255,255,0.22),0 1px 2px rgba(0,0,0,0.05); text-shadow: 0 1px 0 rgba(0,0,0,0.5); padding: .5rem 1rem; font-size: 1.125rem; border-color: #002a80 #002a80 #013013; } .downloadBtn:hover { background-color: #006dcc; background-image: -webkit-linear-gradient(top,#08c,#04c 100%); background-image: linear-gradient(to bottom,#08c,#04c 100%); border-color: #0036a3 #0036a3 #026; } .demoBtn { background-color: #fafafa; background-image: -webkit-linear-gradient(top,#fefefe,#f4f4f4 100%); background-image: linear-gradient(to bottom,#fefefe,#f4f4f4 100%); color: #333; text-decoration: none; border-radius: 3px; border: 1px solid; box-shadow: inset 0 1px 0 rgba(255,255,255,0.22),0 1px 2px rgba(0,0,0,0.05); text-shadow: 0 1px 0 rgba(255,255,255,0.5); padding: .5rem 1rem; font-size: 1.125rem; border-color: #e0e0e0 #e0e0e0 #c1c1c1; } .demoBtn:hover { background-color: #ffffff; background-image: -webkit-linear-gradient(top,#F3F3F3, #E1E1E1 100%); background-image: linear-gradient(to bottom,#F3F3F3, #E1E1E1 100%); border-color: #F3F3F3 #F3F3F3 #E1E1E1; } .emailInput { width: 100%; height: 40px; border-radius: 3px; margin-top: 14px !important; margin-bottom: 14px !important; } </style> <?php global $post; $intro = get_post_meta($post -> ID, $key = 'podcast_file', true); $path = str_replace("http://com.areonline.co.uk/wp-content","",$intro); ?> <div class="downloadHolder"> <h3>Download</h3> <p style="margin-bottom: 20px;">Please note: FTB files can only be used if you have Free The Blobs on Android or iOS.</p> <a href="<?php echo $intro;?>" download="<?php echo basename($intro) ?>" class="demoBtn">Download for PC</a> <!--<a href="#" class="demoBtn">Demo</a>--><br> <input type="text" name="emailValue" id="emailValue" placeholder="Email Address" class="emailInput" style="text-align: center;"> <button onclick="emailsend();" class="downloadBtn" style="margin-top: 0px; width: 100%;">Email for Mobile</button> <span>(We do NOT collect email addresses.)</span> <script>function emailsend() { email = document.getElementById('emailValue').value; downloadurl = '<?php admin_url('admin-ajax.php'); ?>?action=download_email_send&postId=<?php echo $post->ID; ?>&emailValue='+email; document.getElementById('emailsendframe').src = downloadurl; }</script> <!-- iframe for submitting to --> <iframe name="emailsendframe" id="emailsendframe" src="javascript:void(0);" style="display:none;"></iframe> </div> <?php echo WP_CONTENT_DIR . $path; return ob_get_clean(); } add_shortcode('level', 'file_download'); 

И это код AJAX для обработки фактической отправки электронных писем:

 add_action('wp_ajax_download_email_send','download_email_send'); add_action('wp_ajax_nopriv_download_email_send','download_email_send'); // note $_REQUEST will work with $_POST or $_GET methods function download_email_send() { $to = $_REQUEST['emailValue']; // preferably add some email address format validation here // $validate = some_email_validate_function($to); // if ($validated) {$message = 'Please check your email for typos.';} // else { $post_id = $_REQUEST['postID']; // ! you would need to redefine $intro here ! $subject = 'Download for'.basename($intro); $msg = 'Your download for '.basename($intro).' is attached to this email.'; $headers = 'From: Free The Blobs <noreply@freetheblobs.com>' . "\r\n"; $mail_attachment = array(WP_CONTENT_DIR . $path,); $send = wp_mail($to, $subject, $msg, $headers, $mail_attachment); if ($send) {$message = 'Success! Check you email address.';} else {$message = 'Error: Mail sending failed.';} // } // alert the user to the result echo "<script>alert('".$message."');</script>"; exit; } 

Чтобы получить это, чтобы отправить электронное письмо вообще, я должен использовать URL для его вызова и не могу использовать кнопку (я не думаю, что он может получить адрес электронной почты от ввода):

http://com.areonline.co.uk//wp-admin/admin-ajax.php?action=download_email_send&emailValue=example@email.com

Вы можете видеть, что это делает неправильно, поместив вашу электронную почту в бит "example@email.com" в конце (мы не собираем электронные письма, не беспокойтесь: D).

Как вы можете видеть, электронные письма не содержат всю текстовую информацию и полностью отсутствуют файловое приложение.

Что именно я делаю неправильно здесь?