שימוש ב-WebApi של SendGrid עבור משלוח מיילים ( לא באמצעות SMTP )

לאחרונה העברתי חלק מהאתרים של לקוחות מ-VPS-ים שהיו בניהול שלי, אל תוכנית "ענן" של bluehost, סוג של אחסון שיתופי עם שליטה במשאבים . אני עדין מחזיק VPS-ים עבור הפרוייקטים הגדולים, אבל לאתרי תדמית הקטנים, מספיק בהחלט אחסון שיתופי .

במסגרת זו, אחד הפרוייקטים הוא אתר עם תפוצת מיילים גדולה מאוד, אך הבסיס שלו וולונטרי  – מה שאומר שאין מוכנות לשלם עבור מערכת מיילים וכו'.

לצורך כך השתמשתי ב-WebAPI של SendGrid.

מה היתרון של WebAPI על פני שימוש רגיל ב-SMTP ?

כל ספקי האחסון השיתופיים חוסמים מיילים ב-SMTP בצורה זו או אחרת (מגבלה יומית, שעתית, שבועית וכדומה). כאשר שליחת המיילים מנוטרת דרך port 25/26/465 עבור משלוח מיילים ב-Smtp.

אז כדי לעקוף את המגבלה, ל-SendGrid יש WebApi מאוד נוח ומאוד קל לתפעול.

יחד עם זאת התיעוד סביר – אך היה יכול להיות יותר טוב.

אני השתמשתי בגירסה עבור php ( קישור ל-git פה )

התקנת הספריה ב-php באמצעות composer

(אני מניח שאתם משתמשים ב-composer, אם לא, אפשר גם להוריד את הספריה בגיט ולעשות לה require בעצמכם )

בחלק של ה-require בתוך composer.json תוסיפו הפניה לספריה שלהם:

{
  "require": {
    "sendgrid/sendgrid": "~5.0.7"
  }
}

ולאחר מכן להריץ composer update דרך שורת הפקודה (console).

להשיג Api Key בחשבון שלכם ב-SendGrid

כעת – גשו לחשבון שלכם ב-SendGrid והפיקו לעצמכם API KEY , עם ההרשאות שדרושות ( ניתן לשינוי בהמשך , אך הקוד עצמו מופיע רק פעם אחת על המסך ).

והחלק האחרון – המשלוח עצמו.

דוגמא למשלוח מייל באמצעות WebAPI של SendGrid ב-php

הנה דוגמא פשוטה :

הערות : הקוד פה חלקי בלבד .

הקוד מתבסס על use שלא הדבקתי פה.

ואני כותב ב-Laravel ולכן הפונקציה View עם מתודת render().

try {
    $from = new SendGrid\Email(self::SENDER_NAME, self::MANAGER_EMAIL);
    $subject = $e->subject;
    $to = new SendGrid\Email(null, $e->To);
    $body = view('emails.emailWithButton', [
        'body' => $e->body,
        'button' => $e->btn,
        'link' => $e->link,
        'title' => $e->subject])->render();
    $content = new SendGrid\Content("text/html", $body);
    $mail = new SendGrid\Mail($from, $subject, $to, $content);

    $sg = new \SendGrid($apiKey);

    $response = $sg->client->mail()->send()->post($mail);
    echo $response->statusCode();
    echo $response->headers();
    echo $response->body();


ובצורה הזו – שולחים מייל באמצעות API.

התשובה המוחזרת – היא מאוד נוחה ומכילה מידע , שעבורי אומנם לא היה שימושי, אבל אולי לאנשים אחרים הוא יהיה לעזר.

בהצלחה.

 

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *