Skicka e-post med Mailjet (alternativ till Gmail SMTP-server) i PHP
Webbplatsägarna behöver regelbundet skicka e-post till våra användare. Om du använder PHP: s e-post() -funktion för att skicka e-postmeddelanden kommer du snart att inse att dina e-postmeddelanden slutar i skräppost och inte i användarens inkorg. Som ett resultat märker de flesta användare inte dina viktiga e-postmeddelanden. För att lösa detta problem måste du använda SMTP-servrar för att skicka dina e-postmeddelanden.
Gmail SMTP-server är ett ganska populärt val bland utvecklare. Men det finns två problem med den här Google-tjänsten. Först kunde du inte ställa in "från" -adressen när du skickade e-postmeddelandet. Gmail anger din e-postadress (Googles e-post-id) som avsändaradress. För det andra måste du aktivera inställningen "Tillåt mindre säkra appar" som inte rekommenderas av Google.
För att undvika dessa begränsningar hittade jag en alternativ lösning för Gmail SMTP-servern som är Mailjet. Mailjet är en e-postleveransservice för marknadsförings- och utvecklarteam. Vi kan enkelt skicka e-postmeddelanden med Mailjet i PHP. De tillhandahåller sitt eget e-post-API för att skjuta e-post. Du kan också använda deras SMTP-tjänst.
Komma igång
Mailjet tillhandahåller en kvot på 6000 gratis e-postmeddelanden per månad (200 e-postmeddelanden per dag). För små företag är denna fria kvot tillräcklig. Om ditt företag behöver fler e-postmeddelanden, kolla in deras prissida.
Under registreringsprocessen kommer du att bli ombedd att välja sändningsmetod. I denna handledning diskuterar vi både e-post-API och SMTP-relä, så för nu, plocka upp API-alternativet.
Följ nästa steg. Från skärmen nedan trycker du på knappen "Kom igång" under utvecklaravsnittet.
För att ta tag i dina API-nycklar, gå till ‘Kontoinställningar’. På nästa sida, under avsnittet REST API, klicka på "Master API-nyckel och Sub API-nyckelhantering". Kopiera API-nyckeln och den hemliga nyckeln som krävs i nästa steg.
Mailjet tillåter oss att ställa in avsändaradressen. Klicka på "Lägg till en avsändardomän eller adresser" under "Avsändare och domäner" och lägg till en avsändaradress på nästa sida.
Om du ställer in en annan adress än ditt kontos e-postmeddelande får du ett e-postmeddelande för verifiering.
Skicka e-post med Mailjet via cURL i PHP
Vi är redo med våra API-nycklar och redo att skicka e-post med Mailjet och cURL i PHP. Se till att du har aktiverat cURL på din server, annars fungerar följande kod inte som förväntat. Ersätt platshållarna med de faktiska värdena innan du kör koden nedan.
<?php
$body = [
'Messages' => [
[
'From' => [
'Email' => "SENDER_EMAIL_ADDRESS",
'Name' => "SENDER_NAME"
],
'To' => [
[
'Email' => "RECIPIENT_EMAIL_ADDRESS",
'Name' => "RECIPIENT_NAME"
]
],
'Subject' => "Greetings from Mailjet.",
'HTMLPart' => "<h3>Dear User, welcome to Mailjet!</h3><br />May the delivery force be with you!"
]
]
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.mailjet.com/v3.1/send");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($body));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json')
);
curl_setopt($ch, CURLOPT_USERPWD, "API_KEY:SECRET_KEY");
$server_output = curl_exec($ch);
curl_close ($ch);
$response = json_decode($server_output);
if ($response->Messages[0]->Status == 'success') {
echo "Email sent successfully.";
}
Skicka e-post med Mailjet via Guzzle i PHP
Du kanske vill använda Guzzle för att skicka dina e-postmeddelanden. Förmodligen körs din applikation på ett ramverk eller CMS där du använder en kompositör för att hantera bibliotek. I så fall skulle Guzzle vara ett bättre alternativ över CURL.
I dessa scenarier installerar du Guzzle-biblioteket genom att köra kommandot:
composer require guzzlehttp/guzzle
Efter att ha installerat biblioteket med hjälp av koden nedan kan du skicka e-postmeddelanden med Guzzle i PHP.
<?php
require_once "vendor/autoload.php";
use GuzzleHttpClient;
$body = [
'Messages' => [
[
'From' => [
'Email' => "SENDER_EMAIL_ADDRESS",
'Name' => "SENDER_NAME"
],
'To' => [
[
'Email' => "RECIPIENT_EMAIL_ADDRESS",
'Name' => "RECIPIENT_NAME"
]
],
'Subject' => "Greetings from Mailjet.",
'HTMLPart' => "<h3>Dear User, welcome to Mailjet!</h3><br />May the delivery force be with you!"
]
]
];
$client = new Client([
// Base URI is used with relative requests
'base_uri' => 'https://api.mailjet.com/v3.1/',
]);
$response = $client->request('POST', 'send', [
'json' => $body,
'auth' => ['API_KEY', 'SECRET_KEY']
]);
if($response->getStatusCode() == 200) {
$body = $response->getBody();
$response = json_decode($body);
if ($response->Messages[0]->Status == 'success') {
echo "Email sent successfully.";
}
}
Skicka e-post med hjälp av Mailjet SMTP-server och PHPMailer
I ovanstående steg diskuterade vi att använda Mailjet e-post-API för att skicka e-post. I det här avsnittet visar jag dig hur du använder Mailjet SMTP-servern för att skicka ett e-postmeddelande till användarna.
Klicka på ‘Konfigurera min SMTP’ från instrumentpanelen. På nästa sida får du alla SMTP-referenser.
Låt oss se hur man använder SMTP-referenser i PHP och skickar ett e-postmeddelande. Först installerar du PHPMailer-biblioteket i ditt projekt genom att köra kommandot nedan:
composer require phpmailer/phpmailer
Skriv sedan koden nedan i din PHP-fil som skickar ett e-postmeddelande via dina SMTP-referenser.
<?php
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
require_once "vendor/autoload.php";
$mail = new PHPMailer(true);
try {
$mail->isSMTP();
$mail->Host = 'MAILJET_SMTP_SERVER'; // host
$mail->SMTPAuth = true;
$mail->Username = 'API_KEY'; //username
$mail->Password = 'SECRET_KEY'; //password
$mail->SMTPSecure = 'tls';
$mail->Port = 587; //smtp port
$mail->setFrom('SENDER_EMAIL_ADDRESS', 'SENDER_NAME');
$mail->addAddress('RECIPIENT_EMAIL_ADDRESS', 'RECIPIENT_NAME');
$mail->isHTML(true);
$mail->Subject = 'Email Subject';
$mail->Body = '<b>Email Body</b>';
$mail->send();
echo 'Email has been sent.';
} catch (Exception $e) {
echo 'Email could not be sent. Mailer Error: '. $mail->ErrorInfo;
}
Skicka e-post med hjälp av Mailjet SMTP-server och Swift Mailer
Liksom PHPMailer är Swift Mailer också ett populärt bibliotek som är användbart för att skicka ett e-postmeddelande med SMTP-servern. Du bör ha PHP version 7.0 eller högre för att skicka e-postmeddelanden med Swift Mailer-biblioteket. Installera Swift Mailer-biblioteket med kommandot:
composer require swiftmailer/swiftmailer
Vid installation av biblioteket kan du skicka e-postmeddelandet via koden nedan med hjälp av Mailjet SMTP-serveruppgifterna.
<?php
require_once 'vendor/autoload.php';
try {
// Create the Transport
$transport = (new Swift_SmtpTransport('MAILJET_SMTP_SERVER', 587, 'tls'))
->setUsername('API_KET')
->setPassword('SECRET_KEY')
;
// Create the Mailer using your created Transport
$mailer = new Swift_Mailer($transport);
// Create a message
$body = '<b>Email Body</b>';
$message = (new Swift_Message('Email Subject'))
->setFrom(['SENDER_EMAIL_ADDRESS' => 'SENDER_NAME'])
->setTo(['RECIPIENT_EMAIL_ADDRESS'])
->setBody($body)
->setContentType('text/html')
;
// Send the message
$mailer->send($message);
echo 'Email has been sent.';
} catch(Exception $e) {
echo $e->getMessage();
}
Ersätt platshållarna med de faktiska värdena och testa koden. Mottagaren borde ha fått e-postmeddelandet.
Slutsats
I den här guiden studerade vi Mailjets e-post-API och SMTP-relä. Vi diskuterade att skicka ett e-postmeddelande via Mailjet e-post-API med cURL och Guzzle. Mailjet tillhandahåller en SMTP-server så vi har skrivit en kod som använder Mailjet SMTP-servern och skickar ett e-postmeddelande till användarna. Så baserat på dessa tre alternativ kan användare välja något av alternativen beroende på deras projektbehov.
relaterade artiklar
- Skicka e-post med Gmail SMTP-server från PHP Script
- Så här skickar du e-post med Gmail SMTP-server och Swift Mailer-bibliotek
- Skicka e-post via Gmail SMTP-server i Laravel