<?php ini_set("mail.log", "/tmp/mail.log"); ini_set("mail.add_x_header", TRUE); define("TITLE", "Contact Us | MicroUrb"); include('includes/header.php'); /* NOTE: In the form in contact.php, the name text field has the name "name". If the user submits the form, the $_POST['name'] variable will be automatically created and will contain the text they typed into the field. The $_POST['email'] variable will contain whatever they typed into the email field. PHP used in this script: pre_match() - Perform a regular expression match - http://ca2.php.net/preg_match $_POST - An associative array of variables passed to the current script via the HTTP POST method. - http://www.php.net/manual/en/reserved.variables.post.php trim() - Strip whitespace (or other characters) from the beginning and end of a string - http://www.php.net/manual/en/function.trim.php exit - output a message and terminate the current script - http://www.php.net/manual/en/function.exit.php die() - Equivalent to exit - http://ca1.php.net/manual/en/function.die.php wordwrap() - Wraps a string to a given number of characters - http://ca1.php.net/manual/en/function.wordwrap.php mail() - Send mail - http://ca1.php.net/manual/en/function.mail.php */ ?> <div id="contact"> <hr> <h1 class="contact">Get in touch with us!</h1> <?php // Check for header injections function has_header_injection($str) { return preg_match("/[\r\n]/", $str); } if (isset($_POST['contact_submit'])) { $name = trim($_POST['name']); $email = trim($_POST['email']); $msg = $_POST['message']; // Check to see if $name or $email have header injections if (has_header_injection($name) || has_header_injection($email)) { die(); // If true, kill the script } if (!$name || !$email || !$msg) { echo '<h4 class="error">All fields required.</h4><a href="contact.php" class="button block">Go back and try again</a>'; exit; } // Add the recipient email to a variable $to = "renaissance.scholar2012@gmail.com"; // Create a subject $subject = "$name sent you a message via your contact form"; // Construct message $message = "Name: $name\r\n"; $message .= "Email: $email\r\n"; $message .= "Message:\r\n$msg"; // If the subscribed checkbox was checked if (isset($_POST['subscribe']) && $_POST['subscribe'] == 'Subscribe') { // Add a new line to message variable $message .= "\r\n\r\nPlease add $email to the mailing list.\r\n"; } $message = wordwrap($message, 72); // Set mail headers into a variable $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/plain; charset=iso-8859-1\r\n"; $headers .= "From: $name <$email> \r\n"; $headers .= "X-Priority: 1\r\n"; $headers .= "X-MSMail-Priority: High\r\n"; // Send the email mail($to, $subject, $message, $headers); ?> <!-- Show success message afte email has been sent --> <h5>Thanks for contacting MicroUrb!</h5> <p>Please allow 24 hours for a response.</p> <p><a href="index.php" class="button block">« Go to Home Page</a></p> <?php } else { ?> <form method="post" action="" id="contact-form"> <label for="name">Your name</label> <input type="text" id="name" name="name"> <label for="email">Your email</label> <input type="email" id="email" name="email"> <label for="message">and your message</label> <textarea id="message" name="message"></textarea> <input type="checkbox" id="subscribe" name="name" value="Subscribe"> <label for="">Subscribe to newsletter</label> <input type="submit" class="button next" name="contact_submit" value="Send Message"> </form> <?php } ?> <hr> </div> <?php include('includes/footer.php'); ?>
Я пробовал создать простую форму письма. Сама форма находится на моей странице contact.php. Я хотел бы проверить, что код отлично подает и отправляет электронное письмо. Пожалуйста помоги.
Я знал, что будет шанс, что через MAMP или MAMP Pro отправка электронной почты не будет работать, но я нашел документацию, в которой говорится, что вы можете заставить ее работать. Я следил за этой документацией:
https://gist.github.com/zulhfreelancer/4663d11e413c76c6393fc135f72a52ce
и это не сработало для меня. Я пробовал обратиться к автору безрезультатно, и я немного настаиваю на этом времени.
Это то, что я пытался сделать до сих пор:
Я убедился, что сообщения об ошибках включены и настроены на отчет обо всех ошибках, и у меня есть этот код в моем файле index.php:
<?php ini_set('error_reporting', E_ALL); ini_set('display_errors', 'On'); define("TITLE", "Home | MicroUrb"); include('includes/header.php'); ?> <div id="philosophy"> <hr> <h1>MicroUrb's Philosophy</h1> <p>Here at MicroUrb we guarantee you organically grown produce, because we grew it ourselves and we are local. We're not pompous, we're proud. We're proud of our work, our quality, our environment and our love for fresh local produce and family.</p> <p>Thank you, from your local urban family farm.</p> <hr> </div><!-- philosophy --> <?php include('includes/footer.php'); ?>
в<?php ini_set('error_reporting', E_ALL); ini_set('display_errors', 'On'); define("TITLE", "Home | MicroUrb"); include('includes/header.php'); ?> <div id="philosophy"> <hr> <h1>MicroUrb's Philosophy</h1> <p>Here at MicroUrb we guarantee you organically grown produce, because we grew it ourselves and we are local. We're not pompous, we're proud. We're proud of our work, our quality, our environment and our love for fresh local produce and family.</p> <p>Thank you, from your local urban family farm.</p> <hr> </div><!-- philosophy --> <?php include('includes/footer.php'); ?>
в<?php ini_set('error_reporting', E_ALL); ini_set('display_errors', 'On'); define("TITLE", "Home | MicroUrb"); include('includes/header.php'); ?> <div id="philosophy"> <hr> <h1>MicroUrb's Philosophy</h1> <p>Here at MicroUrb we guarantee you organically grown produce, because we grew it ourselves and we are local. We're not pompous, we're proud. We're proud of our work, our quality, our environment and our love for fresh local produce and family.</p> <p>Thank you, from your local urban family farm.</p> <hr> </div><!-- philosophy --> <?php include('includes/footer.php'); ?>
Если вы посмотрите на мой код в contact.php, вы увидите, что вызывается функция mail ().
Я проверил журналы MAMP Pro, а для Postfix у меня ничего не было, потому что Postfix, похоже, не работает (может это проблема?) Для журналов apache у меня была эта ошибка:
unknown: warning: /etc/postfix/main.cf, line 696: overriding earlier entry: inet_protocols=all sendmail: warning: /etc/postfix/main.cf, line 676: overriding earlier entry: inet_protocols=ipv4 sendmail: warning: /etc/postfix/main.cf, line 696: overriding earlier entry: inet_protocols=all postdrop: warning: /etc/postfix/main.cf, line 696: overriding earlier entry: inet_protocols=all
но который был вызван следующим Шагом 2 ссылки, которую я разделил выше, где мне было предложено добавить это:
myorigin = live.com myhostname = smtp.live.com relayhost = smtp.live.com:587 smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_sasl_mechanism_filter = plain inet_protocols = ipv4 smtp_use_tls = yes smtp_tls_security_level=encrypt tls_random_source=dev:/dev/urandom
Строка 8 выше противоречила inet_protocols = all, поэтому я удалил строку 8 выше, и проблема исчезла, но исходная проблема неспособности отправлять почту по-прежнему существует.
Полагаю, что я поставил все заголовки писем:
// Set mail headers into a variable $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-type: text/plain; charset=iso-8859-1\r\n"; $headers .= "From: $name <$email> \r\n"; $headers .= "X-Priority: 1\r\n"; $headers .= "X-MSMail-Priority: High\r\n";
Я считаю, что значение получателя верно:
// Send the email mail($to, $subject, $message, $headers);
Я попробовал несколько учетных записей электронной почты, такую же проблему.
Поэтому я считаю, что мой вопрос не является дубликатом другой публикации, о которой идет речь, потому что, как описано выше, я прошел шаги по устранению неполадок этой самой публикации SO, и она не решила мою проблему.
Я могу только догадываться, что моя проблема более конкретна для того, чтобы заставить Postfix работать на моем MAMP Pro. Я не проверяю, верно ли mail () true или false, или мне просто нужно перейти с PHPMailer или какой-либо другой.