2
votes

I want to use SendGrid SMTP services to send emails from my website's contact form. The submit button on the form just spits out a blank version of my website, with no emails sent to my inbox.

Here's the PHP code:

<?php

require("class.phpmailer.php");
    $mail = new PHPMailer();

    // SMTP & Sendgrid settings
    $mail->IsSMTP();
    $mail->Host = "smtp.sendgrid.net";
    $mail->Port = "465";
    $mail->SMTPAuth = "true";   // Enable SMTP authentication
    $mail->Username = "sendgrid username";
    $mail->Password = "sendgrid password";
    $mail->SMTPSecure = ''; // Enable encryption, 'ssl' also accepted

    // Email headers and body
    $mail->SetFrom("[email protected]");
    $mail->AddAddress("[email protected]");

    // Form fields
        $Name = $_POST['Name'];
        $Email = $_POST['Email'];
        $Contact = $_POST['Contact'];
        $Message = $_POST['Message'];


    $mail->Subject  = "Message from yoursite.com";
    $mail->Body     = "You have a new message from your contact form on site.com \n \n Name: $Name \n Email: $Email \n Contact: $Contact \n Message: $Message";
    $mail->WordWrap = 50;


    if(!$mail->Send()) {
      echo 'Message was not sent.';
      echo 'Mailer error: ' . $mail->ErrorInfo;
    }
    else {
      echo 'Message has been sent.';
    }
header('Location: mywebsite.com');
 ?>
1
See here, require("class.phpmailer.php"); $mail = new PHPMailer();, if you want to use SendGrid API then why are you using PHPMailer library here? Read the documentation here, https://sendgrid.com/docs/Integrate/Code_Examples/v2_Mail/php.html - Rajdeep Paul
Oh alright. So I need to use SendGrids PHP library. I've downloaded the Library, copied the sendgrid-php.php file to my root directory and added the following line of code to my php file: require("sendgrid-php.php"); Is this what you're saying? - kfm1607
Yes. And on top of that, you have to refactor your code as well because none of PHPMailer related code will work with SendGrid API. - Rajdeep Paul
<?php require("sendgrid-php.php"); $sendgrid = new SendGrid("SENDGRID_KEY"); $email = new SendGrid\Email(); $email->addTo("email address of recipient of the form") ->setFrom("email address") ->setSubject("Sending with SendGrid is Fun") ->setHtml("and easy to do anywhere, even with PHP"); $sendgrid->send($email); Is this correct or am i missing something? Because it still doesn't work. - kfm1607
Can you please point me the documentation you're following, also from where you have downloaded SendGrid library i.e. sendgrid-php.php file? - Rajdeep Paul

1 Answers

3
votes

Here's the step-by-step process to send emails using SendGrid API,

  • Download the archived SendGrid library from Download Packaged Library. Extract it and put it in your project directory.
  • Go to https://app.sendgrid.com/settings/api_keys and create an API key for your account/application.
  • Now comes to the coding part. Refactor your code in the following way,

    require_once('sendgrid-php/sendgrid-php.php');
    
    $from = new SendGrid\Email(null, "SENDER'S_EMAIL_ADDRESS");
    $subject = "Hello World from the SendGrid PHP Library!";
    $to = new SendGrid\Email(null, "RECEIVER'S EMAIL ADDRESS");
    $content = new SendGrid\Content("text/plain", "Hello, Email!");
    $mail = new SendGrid\Mail($from, $subject, $to, $content);
    
    $apiKey = 'YOUR_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";
    }
    

    Don't forget to change SENDER'S_EMAIL_ADDRESS, RECEIVER'S_EMAIL_ADDRESS and YOUR_API_KEY as per your requirement. On top of this, change the subject and body of the email as per your application's requirement.


Sidenote: In case anything goes wrong in the midway, use the following three response methods for debugging.

echo $response->statusCode();
var_dump($response->headers());
echo $response->body();