我使用 Nuxt 创建了自己的作品集页面,并使用 PHPMailer 来处理联系表单。我正在使用
axios.post
从联系表单发送数据。我可以在网络浏览器中看到我提供的数据已发送,但 PHP 代码无法从 POST 获取它们,因为邮件正在发送,但它是空白的。
PHP 代码:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php'; // Ścieżka do autoload.php PHPMailer
// Sprawdź, czy otrzymano dane z formularza POST
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// Odbierz dane z formularza
$email = $_POST["email"];
$subject = $_POST["subject"];
$message = $_POST["message"];
var_dump($_POST['email']);
// Utwórz nowy obiekt PHPMailer
$mail = new PHPMailer();
$mail->CharSet = "UTF-8";
$mail->SMTPDebug = 2;
try {
// Konfiguracja serwera SMTP
$mail->isSMTP();
$mail->Host = 'marcincymerman.pl'; // Tutaj wpisz adres serwera SMTP
$mail->SMTPAuth = true;
$mail->Username = 'xxxx'; // Tutaj wpisz adres e-mail do autoryzacji
$mail->Password = 'xxxx'; // Tutaj wpisz hasło e-mail do autoryzacji
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
// Ustawienia wiadomości e-mail
$mail->addAddress('[email protected]', 'Marcin Cymerman'); // Tutaj wpisz adres e-mail odbiorcy
$mail->Subject = "New Contact Form Submission: $subject";
$mail->Body = "Email: $email\nMessage: $message";
// Wyślij wiadomość e-mail
$mail->send();
echo 'message has been send';
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
} else {
echo 'Invalid request';
}
?>
HTML 表单:
<form class="contact-form items-center mt-[32px] space-y-[16px]" @submit.prevent="submitForm">
<div
class="input-box w-full translate-x-[100px] opacity-0 transition-transform-opacity duration-500"
:class="{ 'text-red-500': v$.email.$error }"
>
<label for="email" v-if="locale == 'pl-PL'" class="font-semibold">Adres email:</label>
<label for="email" v-else class="font-semibold">Email address:</label>
<input
type="text"
name="email"
class="outline-none p-[5px] rounded-md bg-transparent border-[1px] border-gray-700 dark:border-gray-200"
:class="{ 'border-red-500': v$.email.$error }"
v-model="inputsDetails.email"
/>
<span class="input-error" v-if="v$.email.$error">{{ $t('contactForm.emailErr') }}</span>
</div>
<div
class="input-box w-full translate-x-[100px] opacity-0 transition-transform-opacity duration-500"
:class="{ 'text-red-500': v$.subject.$error }"
>
<label for="topic" v-if="locale == 'pl-PL'" class="font-semibold">Temat:</label>
<label for="topic" v-else class="font-semibold">Topic:</label>
<input
type="text"
name="topic"
class="outline-none p-[5px] rounded-md bg-transparent border-[1px] border-gray-700 dark:border-gray-200"
:class="{ 'border-red-500': v$.subject.$error }"
v-model="inputsDetails.subject"
/>
<span class="input-error" v-if="v$.subject.$error">{{ $t('contactForm.topicErr') }}</span>
</div>
<div
class="input-box w-full translate-x-[100px] opacity-0 transition-transform-opacity duration-500"
:class="{ 'text-red-500': v$.message.$error }"
>
<label for="message" v-if="locale == 'pl-PL'" class="font-semibold">Wiadomość:</label>
<label for="message" v-else class="font-semibold">Message:</label>
<textarea
type="text"
name="message"
class="resize-none p-[5px] outline-none rounded-md bg-transparent border-[1px] border-gray-700 dark:border-gray-200 overflow-hidden"
@keypress="resizeTextarea"
v-model="inputsDetails.message"
:class="{ 'border-red-500': v$.message.$error }"
></textarea>
<span class="input-error" v-if="v$.message.$error">{{ $t('contactForm.messageErr') }}</span>
</div>
<input
type="submit"
:value="btnText"
class="send-btn px-4 cursor-pointer py-2 font-semibold dark:border-gray-200 border-[1px] border-gray-700 rounded-md hover:bg-gray-700 hover:text-gray-200 dark:hover:bg-gray-200 dark:hover:text-gray-700 transition-all duration-300 translate-x-[100px] opacity-0"
/>
</form>
Nuxt代码:
const sendMail = async () => {
try {
const response = await axios.post(
'https://marcincymerman.pl/send_email.php',
{
email: inputsDetails.email,
subject: inputsDetails.subject,
message: inputsDetails.message,
},
{
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
}
)
console.log(response.data)
} catch (error) {
console.error('Error:', error)
}
}
SMTPDebug 的输出:
2024-02-09 11:58:54 SERVER -> CLIENT: 220 h29.seohost.pl ESMTP Exim 4.97.1 Fri, 09 Feb 2024 12:58:54 +0100
2024-02-09 11:58:54 CLIENT -> SERVER: EHLO marcincymerman.pl
2024-02-09 11:58:54 SERVER -> CLIENT: 250-h29.seohost.pl Hello host-18821022299.seohost-mail.eu [188.210.222.99]250-SIZE 209715200250-8BITMIME250-DSN250-PIPELINING250-PIPECONNECT250-AUTH PLAIN LOGIN250-STARTTLS250 HELP
2024-02-09 11:58:54 CLIENT -> SERVER: STARTTLS
2024-02-09 11:58:54 SERVER -> CLIENT: 220 TLS go ahead
2024-02-09 11:58:54 CLIENT -> SERVER: EHLO marcincymerman.pl
2024-02-09 11:58:54 SERVER -> CLIENT: 250-h29.seohost.pl Hello host-18821022299.seohost-mail.eu [188.210.222.99]250-SIZE 209715200250-8BITMIME250-DSN250-PIPELINING250-PIPECONNECT250-AUTH PLAIN LOGIN250 HELP
2024-02-09 11:58:54 CLIENT -> SERVER: AUTH LOGIN
2024-02-09 11:58:54 SERVER -> CLIENT: 334 VXNlcm5hbWU6
2024-02-09 11:58:54 CLIENT -> SERVER: [credentials hidden]
2024-02-09 11:58:54 SERVER -> CLIENT: 334 UGFzc3dvcmQ6
2024-02-09 11:58:54 CLIENT -> SERVER: [credentials hidden]
2024-02-09 11:58:54 SERVER -> CLIENT: 235 Authentication succeeded
2024-02-09 11:58:54 CLIENT -> SERVER: MAIL FROM:<>
2024-02-09 11:58:54 SERVER -> CLIENT: 250 OK
2024-02-09 11:58:54 CLIENT -> SERVER: RCPT TO:<[email protected]>
2024-02-09 11:58:54 SERVER -> CLIENT: 250 Accepted
2024-02-09 11:58:54 CLIENT -> SERVER: DATA
2024-02-09 11:58:54 SERVER -> CLIENT: 354 Enter message, ending with "." on a line by itself
2024-02-09 11:58:54 CLIENT -> SERVER: Date: Fri, 9 Feb 2024 12:58:54 +0100
2024-02-09 11:58:54 CLIENT -> SERVER: To: Marcin Cymerman <[email protected]>
2024-02-09 11:58:54 CLIENT -> SERVER: From:
2024-02-09 11:58:54 CLIENT -> SERVER: Subject: New Contact Form Submission:
2024-02-09 11:58:54 CLIENT -> SERVER: Message-ID: <[email protected]>
2024-02-09 11:58:54 CLIENT -> SERVER: X-Mailer: PHPMailer 6.9.1 (https://github.com/PHPMailer/PHPMailer)
2024-02-09 11:58:54 CLIENT -> SERVER: MIME-Version: 1.0
2024-02-09 11:58:54 CLIENT -> SERVER: Content-Type: text/plain; charset=UTF-8
2024-02-09 11:58:54 CLIENT -> SERVER:
2024-02-09 11:58:54 CLIENT -> SERVER: Email:
2024-02-09 11:58:54 CLIENT -> SERVER: Message:
2024-02-09 11:58:54 CLIENT -> SERVER:
2024-02-09 11:58:54 CLIENT -> SERVER: .
2024-02-09 11:58:55 SERVER -> CLIENT: 250 OK id=1rYPWw-00000006d4W-40r8
2024-02-09 11:58:55 CLIENT -> SERVER: QUIT
2024-02-09 11:58:55 SERVER -> CLIENT: 221 h29.seohost.pl closing connection
仍然发送空白邮件。
file_get_contents('php://input') 的输出:
{email: '[email protected]', subject: 'dadad', message: 'Lorem ipsum, dolor sit amet consectetur adipisicin… consequuntur, suscipit laborum ab provident quo?'}
问题已解决。
我需要首先解码 json:
$data = json_decode(file_get_contents("php://input"), TRUE);
然后从 $data 变量中提取所需的数据:
$email = $data['email'];
$subject = $data['subject'];
$message = $data['message'];