Недавно я перешел из общего доступа к Windows VPS. Я пытаюсь заставить phpmailer работать на контактную форму на моем веб-сайте.
Код для моего сайта устанавливает адрес электронной почты для отправки:
$mail->IsSMTP(); // set mailer to use SMTP $mail->Host = "smtp.gmail.com"; // specify main and backup server or localhost $mail->SMTPAuth = true; // turn on SMTP authentication $mail->SMTPSecure = "tls"; $mail->SMTPDebug = 1; // can vary the amount of debug info given on error $mail->Username = "mail@mydomain.com"; // SMTP username $mail->Password = "########"; // SMTP password $mail->Port = 587;
Этот код работал над старым хостингом Windows. Также все остальное идентично и сайту (файл class.phpmailer.php и т. Д.),
Поэтому я предполагаю, что это связано с моей настройкой iis или самого сервера.
Подключение к порту 587 в соответствии с моими веб-хостами, которые проверили это для меня
Я установил php, используя инструмент Microsoft, который делает все для вас. сайт находится в php и работает, и он смотрит на мой неподготовленный глаз, как будто все в порядке.
Я проверил, что php_openssl.dll включен.
Я долгое время читал и возился без везения. Я действительно в недоумении, как смотреть дальше. Любые идеи, что это может быть или что я должен попробовать?
благодаря!
Фил.
РЕДАКТИРОВАТЬ:
Действие в php-форме – перейти к contactprocessor.php.
Этот файл содержит этот код:
<? ob_start(); if(isset($_POST['btnSubmit'])) { require("class.phpmailer.php"); $mail = new PHPMailer(); //Your SMTP servers details $mail->IsSMTP(); // set mailer to use SMTP $mail->Host = "smtp.gmail.com"; // specify main and backup server or localhost $mail->SMTPAuth = true; // turn on SMTP authentication $mail->SMTPSecure = "tls"; $mail->SMTPDebug = 1; // can vary the amount of debug info given on error $mail->Username = "mail@mydomain.com"; // SMTP username $mail->Password = "########"; // SMTP password $mail->Port = 587; $redirect_url = "http://www.mydomain.com/contact/contact_success.php"; //Redirect URL after submit the form $mail->From = $mail->Username; //Default From email same as smtp user $mail->FromName = "Website Contact Form"; $mail->AddAddress("mail@mydomain.com", "From Contact Form"); //Email address where you wish to receive/collect those emails. $mail->WordWrap = 50; // set word wrap to 50 characters $mail->IsHTML(true); // set email format to HTML $mail->Subject = "From Contact Form"; $message = "FullName: ".htmlspecialchars($_POST['fullname'])." <br> <br> \r\n <br>EmailAddress: ".htmlspecialchars($_POST['email'])." <br> <br> \r\n <br>Phone Number: ".htmlspecialchars($_POST['mobile'])." <br> <br> \r\n <br> Message: <br>".htmlspecialchars($_POST['message']); $mail->Body = $message; if(!$mail->Send()) { echo "Sorry the message could not be sent. Please email mail@mydomain.com instead. Thanks<p>"; echo "Mailer Error: " . $mail->ErrorInfo; exit; } echo "Message has been sent"; header("Location: $redirect_url"); } ?>
Вместо того, чтобы фактически отправлять электронное письмо, просто кажется, что печатайте выше на экране пользователя, как будто это веб-страница. это похоже на то, что сервер считает, что это html-страница, и просто обслуживает ее.
Вы написали:
Вместо того, чтобы фактически отправлять электронное письмо, он просто печатает вышеуказанный [код] на экране пользователя, как будто это веб-страница. это похоже на то, что сервер считает, что это html-страница, и просто обслуживает ее.
Я думаю, что ваша проблема не связана с phpMailer, или вообще электронной почтой.
Это почти наверняка будет просто небольшой разницей между конфигурацией PHP на старых и новых серверах.
Ваш PHP-код использует короткие текстовые теги PHP, то есть начиная с <?
,
Многие серверы PHP настроены так, чтобы не допускать этот тег короткого стиля, и запускать только PHP-код, который начинается с полного <?php
.
Учитывая то, что вы указали в замечании, которое я цитировал выше, я подозреваю, что это ваша проблема, потому что то, что вы описываете, является именно тем симптомом, который я ожидал бы от этого.
У вас есть два варианта:
Измените свой код, чтобы использовать длинный стиль <?php
tag.
Измените конфигурацию своего сервера, чтобы короткая <?
тег.
Я бы рекомендовал использовать опцию (1), если это возможно, потому что теги с длинной формой считаются наилучшей практикой (короткая форма не рекомендуется, так как она может иметь потенциальное столкновение с маркером <?xml
в начале большинства документов XML).
Если у вас много коротких форм <?
теги (и если вам разрешено это делать), изменение конфигурации сервера может быть целесообразно, но если достаточно легко исправить проблему, переключившись на длинные теги, я бы сказал, что это будет лучше.
Надеюсь, это поможет.
Спасибо Спадли за ответ. У меня было <?
(что является сокращением, которое, по-видимому, не работает на новых установках php). Это должно быть <?php
что заставило его работать. Еще раз спасибо.