Реструктурировать контактную форму php

так как я уже не знаю PHP, мне нужна помощь в некотором кодировании.

У меня есть контактная форма php, которая отлично работает, где элементы формы html обрабатываются с помощью javascript и этого php-кода:

<?php $to = "contact@ihabovich.ga"; $from = $_REQUEST['email']; $name = $_REQUEST['name']; $headers = "From: $from"; $subject = "[Contact form] You have a message from $name."; $fields = array(); $fields{"name"} = "Name"; $fields{"email"} = "Email"; $fields{"phone"} = "Phone"; $fields{"department"} = "Department"; $fields{"message"} = "Message"; $body = "Here is what was sent:\n\n"; foreach($fields as $a => $b){ $body .= sprintf("%20s: %s\n",$b,$_REQUEST[$a]); } $send = mail($to, $subject, $body, $headers); ?> 

Поскольку я хочу обрабатывать отправку почты с использованием SMTP-сервера вместо mail () через локальный хост, я использовал SwiftMailer, за исключением того, что я не могу структурировать код для отправки того же шаблона электронной почты с элементами формы, что и старый.

 <?php require_once 'lib/swift_required.php'; // Create the Transport $transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl') ->setUsername('username@gmail.com') ->setPassword('password') ; /* You could alternatively use a different transport such as Sendmail or Mail: // Sendmail $transport = Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs'); // Mail $transport = Swift_MailTransport::newInstance(); */ // Create the Mailer using your created Transport $mailer = Swift_Mailer::newInstance($transport); // Create a message $message = Swift_Message::newInstance('[Contact form] You have a message from') ->setFrom(array('john@doe.com' => 'John Doe')) ->setTo(array('username@gmail.com' => 'A name')) ->setBody('Here is the message itself'); // Send the message $result = $mailer->send($message); ?> 

Буду признателен за любую оказанную помощь.

Solutions Collecting From Web of "Реструктурировать контактную форму php"

Вы можете использовать синтаксический анализ из старой программы для создания объекта и тела. Затем вы можете просто подключить их к быстрому сообщению. См. Код ниже (вам нужно только изменить имя пользователя и пароль gmail). Обратите внимание, что gmail не любит серверы, отправляющие почту от вашего имени, и вам, возможно, потребуется авторизовать ее, заполнив здесь переписку: https://accounts.google.com/displayunlockcaptcha

 <?php $gmail_username = 'username@gmail.com'; $gmail_password = 'password'; $to = "contact@ihabovich.ga"; $from = $_REQUEST['email']; $name = $_REQUEST['name']; $subject = "[Contact form] You have a message from $name."; $fields = array(); $fields{"name"} = "Name"; $fields{"email"} = "Email"; $fields{"phone"} = "Phone"; $fields{"department"} = "Department"; $fields{"message"} = "Message"; $body = "Here is what was sent:\n\n"; foreach($fields as $a => $b){ $body .= sprintf("%20s: %s\n",$b,$_REQUEST[$a]); } require_once 'lib/swift_required.php'; // Create the Transport $transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl') ->setUsername($gmail_username) ->setPassword($gmail_password) ; // Create the Mailer using your created Transport $mailer = Swift_Mailer::newInstance($transport); // Create a message $message = Swift_Message::newInstance($subject) ->setFrom($gmail_username) ->setReplyTo(array($from => $name)) ->setTo($to) ->setBody($body); // Send the message $result = $mailer->send($message); ?> 

Я думаю, что ответ @ trex005 был солидным, но ваше сообщение о щедрости подсказывает, что оно недостаточно детально. Из-за этого я добавляю только новый ответ.

первая часть SwiftMailer определяет, какой сервер вы собираетесь использовать для отправки почты. Эта почта относится к категории транзакционных писем, что означает, что пользователь сделал что-то для отправки этого письма. Две службы выделяются мне как хорошие с такой почтой: SendGrid и Mandirll . Я тестировал свой пример с SendGrid, и он отлично работает. Однако, ваш вопрос предполагает, что вы хотели бы использовать GMail. Вы не можете использовать GMail для этого.

Google предполагает, что любое электронное письмо, отправленное на его SMTP-сервер, отправляется для личного использования пользователем, который его аутентифицирует. Если вы попытаетесь отправить электронное письмо с заголовком FROM: с помощью GMail, заголовок FROM: всегда будет изменен Google на пользователя, предоставившего свое имя пользователя и пароль. Обход этого нецелесообразен – потому что GMail не предназначен для такого рода писем.

 $transport = Swift_SmtpTransport::newInstance('smtp.sendgrid.net', 587, 'tls') ->setUsername('Sendgrid/Mandrill User') //Replace this with your info ->setPassword('Sendgrid/Mandrill Password') //Replace this with your info ; 

Вышеупомянутый код-шутник показывает, как вам нужно пройти аутентификацию с помощью SMTP-сервера.

Жесткая часть не работает, поэтому позволяет захватить все переменные, передаваемые этой почтовой программе:

 $to = "contact@ihabovich.ga"; $from = $_REQUEST['email']; $name = $_REQUEST['name']; $subject = "[Contact form] You have a message from $name."; $fields = array(); $fields{"name"} = "Name"; $fields{"email"} = "Email"; $fields{"phone"} = "Phone"; $fields{"department"} = "Department"; $fields{"message"} = "Message"; $body = "Here is what was sent:\n\n"; foreach($fields as $a => $b){ $body .= sprintf("%20s: %s\n",$b,$_REQUEST[$a]); } 

Это было предоставлено в вашем вопросе и работало, поэтому мы можем оставить его в основном как есть. $headers избыточны, так как заголовки электронной почты будут сгенерированы SwiftMailler, чтобы удалить.

Теперь нам действительно нужно создать сообщение с помощью SwiftMailler:

 $mailer = Swift_Mailer::newInstance($transport); $message = Swift_Message::newInstance() ->setSubject($subject) //User provided subject ->setFrom(array($from => $name)) //The user ->setTo($to) //This should be you ->setBody($body); //whatever the user wanted to say 

Выше представлены все критические заголовки, которые необходимы для отправки электронной почты в соответствии с вашими требованиями. Есть больше вариантов, если вам когда-либо понадобится его расширить, однако больше информации можно найти в документах SwiftMailler .

Наконец, скажите почтовому отправителю на самом деле отправить сообщение:

$mailer->send($message);

Когда все сказано и сделано, ваш окончательный сценарий выглядит так и должен быть заменой для копирования / вставки для вашего старого (за исключением вашего имени пользователя / пароля).

 <?php require_once 'lib/swift_required.php'; //As previously mentioned, you may also use Mandrill for this. $transport = Swift_SmtpTransport::newInstance('smtp.sendgrid.net', 587, 'tls') ->setUsername(/*Your SendGrid Username*/) ->setPassword(/*Your SendGrid Password*/) ; $to = "contact@ihabovich.ga"; $from = $_REQUEST['email']; $name = $_REQUEST['name']; $subject = "[Contact form] You have a message from $name."; $fields = array(); $fields{"name"} = "Name"; $fields{"email"} = "Email"; $fields{"phone"} = "Phone"; $fields{"department"} = "Department"; $fields{"message"} = "Message"; $body = "Here is what was sent:\n\n"; foreach($fields as $a => $b){ $body .= sprintf("%20s: %s\n",$b,$_REQUEST[$a]); } $mailer = Swift_Mailer::newInstance($transport); $message = Swift_Message::newInstance() ->setSubject($subject) ->setFrom(array($from => $name)) ->setTo($to) ->setBody($body); $mailer->send($message); ?>