【发布时间】:2019-02-11 16:56:18
【问题描述】:
我有一个 html 字段集和一个简短的 php 文件,用于在单击提交按钮时通过 sendgrid 发送电子邮件。
HTML
<form id="contact-form" action="scripts/mailer.php" method="post">
<fieldset form="#contact-form">
<legend>Contact Form</legend>
<label class="input-field-name">Name:<br />
<input class="input-field" type="text" name="name" required/>
</label><br />
<label class="input-field-name">Email:<br />
<input class="input-field" type="text" name="email" required/>
</label><br />
<label class="input-field-name">Message Title:<br />
<input class="input-field" type="text" name="header" required/>
</label><br />
<label class="input-field-name">Message:<br />
<textarea class="message-field" type="text" name="message" required></textarea>
</label><br />
<button id="submit-button" type="submit">Submit</button>
</fieldset>
</form>
PHP
<?php
require_once('sendgrid-php/sendgrid-php.php');
$name = $_POST["name"];
$email = $_POST["email"];
$header = $_POST["header"];
$message = $_POST["message"];
$from = new SendGrid\Email(null, $email);
$subject = $header;
$to = new SendGrid\Email(null, "MY EMAIL ADDRESS");
$content = new SendGrid\Content("text/plain", $message);
$mail = new SendGrid\Mail($from, $subject, $to, $content);
$apiKey = 'MY API KEY';
$sg = new \SendGrid($apiKey);
$response = $sg->client->mail()->send()->post($mail);
if($response->statusCode() == 202){
echo "Email sent successfully";
}else{
echo "Email could not be sent";
}
echo $response->statusCode();
var_dump($response->headers());
echo $response->body();
我在 GoDaddy 上托管我的网站,根据我一直在阅读的所有内容,我相信这应该可以工作,但我收到 http 错误 500,我的网站无法处理此请求。
关于如何解决这个问题的任何想法?谢谢
【问题讨论】:
-
当然,这是一个伪造的
apiKey.... 对吗???如果不知道该怎么做。 -
感谢上帝
-
列出来自日志文件服务器 500 的错误 - 致命错误 php
-
我不知道 Sendgrid 的 api,但您的代码似乎很奇怪。你为什么不试着捕捉整个事情,捕捉异常和可抛出,看看有什么给出(假设你没有合适的 IDE)。一般来说,您应该进行防御性编码,并使用大量的故障检测/日志记录等……因为这样,您的飞行没有安全网。\
-
@PumpkinBreath 您的 API 密钥在编辑历史记录中并且仍然是公开的。您也可以开始撤销它的过程,因为它已受到损害(或者您知道您可以忍受它受到损害)。如果我戴一顶黑帽子,我也会为那些看起来像历史上这样的钥匙的东西刮掉。