John the Painter
John the Painter

Reputation: 2615

SendGrid (PHP library) with attachments

I have a simple SendGrid API setup but I am wondering how I can include attachments in the email that gets sent. I am passing the attachment URL into the $_POST variable so can return the full path but unsure where to include it in my setup.

//
$i = 1; foreach ($cart as $download) {

    $file . $i = $download['download'];
    $file_encoded . $i = base64_encode(file_get_contents($file));
    $attachment . $i = new SendGrid\Attachment();
    $attachment . $i->setContent($file_encoded);
    $attachment . $i->setType("application/zip");
    $attachment . $i->setDisposition("attachment");
    $attachment . $i->setFilename("test.zip");
    $mail->addAttachment($attachment . $i);

    i++;

}

// Set email confirmation settings
$email_subject = 'New order from ' . $user_details['first-name-billing'] . ' ' . $user_details['last-name-billing'] . ' via www.***.com';
$email_admin = '******@***.com'; // Client
$email_customer = $user_details['email'];

ob_start();
    require_once './email-confirmation.php';
    $email_body = ob_get_contents();
ob_end_clean();

// Send to confirmation to admin
if ($email_admin) {
    send_email($email_admin, $email_admin, $email_subject, $email_body);
}

// Send confirmation to customer
if ($email_customer) {
    send_email($email_admin, $email_customer, $email_subject, $email_body);
}

// SendGrid init
function send_email($from_email, $to_email, $subject, $body) {
    global $sgAPIKey;
    $from = new SendGrid\Email(null, $from_email);
    $to = new SendGrid\Email(null, $to_email);
    $content = new SendGrid\Content("text/html", $body);
    $mail = new SendGrid\Mail($from, $subject, $to, $content);
    $sg = new \SendGrid($sgAPIKey);
    $response = $sg->client->mail()->send()->post($mail);
}

Upvotes: 6

Views: 12438

Answers (2)

Barmar
Barmar

Reputation: 780724

Use the SendGrid\Attachment class. A complete example can be found in the documentation:

$filename = basename($url);
$file_encoded = base64_encode(file_get_contents($url));
$attachment = new SendGrid\Attachment();
$attachment->setType("application/text");
$attachment->setContent($file_encoded);
$attachment->setDisposition("attachment");
$attachment->setFilename($filename);
$mail->addAttachment($attachment);

Upvotes: 13

Ian Medina
Ian Medina

Reputation: 24

$textMessageModel = new TextMessage;
$leadActivityModel = new LeadRecordActivity;
$leadsModel = new Leads;
$sentEmailModel = new SentEmail;
$userDetailsModel = new UserDetails;
$to = $request->input('to');
$filename = $request->input('filename');
$contentFile = $request->input('fileContent');
$from = $request->input('from');
$content = $request->input('content');
$subject = $request->input('subject');
$leadId = $leadsModel->fetchLeadEmailByUserIdData($to);
$fromName = $userDetailsModel->fetchUserDetails(Session::get('user_id'))->full_name;


$email = new \SendGrid\Mail\Mail(); 
$email->setFrom($from, $fromName);
$email->setSubject($subject);
$email->addTo($to, "");
$email->addContent(
        "text/html", $content
);

    // $file_encoded = (''.$contentFile.'');

    foreach( $filename as $index => $code ) {
        $email->addAttachment(
            ''.$contentFile[$index].'',
            "application/json",
            $filename[$index],
            "attachment"
        );
 }

$sendgrid = new \SendGrid(env('SENDGRID_API_KEY'));
try {
        $response = $sendgrid->send($email);
} catch (Exception $e) {

}

Upvotes: 0

Related Questions