Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

fastsol's avatar

Send custom args to Sendgrid in Laravel 9

I have a Laravel 8 site that works perfectly but I was trying to update it to Laravel 9. The issue I'm having is trying to figure out how to send custom_args or personalizations with the new Symfony Mailer compared to the old SwiftMailer Laravel has traditionally used. I have searched and searched for code online but have found nothing at all that helps convert this.

I'll be honest, I don't really even understand how the old code works exactly or where I got the info from. All I know is it works. I need to send custom_args with the mail so Sendgrid can send them back in webhooks. Without this functionality, a big part of my site will not function.

If anyone knows how to convert this old code or tell me how to do it a different way, I would so greatly appreciate it. If you can give me some actual code or examples that get this working, I am happy to donate to you.

The code below is an event listener on the Laravel MessageSending event. I currently use this package for the "driver" in Laravel s-ichikawa/laravel-sendgrid-driver. The code seems to indicate that I'm sending an attachment or something, but that seems kind of weird to me. I know very little about the SwiftMailer and even less about the new SymfonyMailer.


namespace App\Listeners;

use App\Helpers\Mail\MailTrackerSetup;
use Illuminate\Mail\Events\MessageSending;
use Sichikawa\LaravelSendgridDriver\SendGrid;
use Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport;

/**
 * Class SetSendgridCustomArg
 * @package App\Listeners
 */
class SetSendgridCustomArg
{
    use SendGrid {
        sgEncode as encode;
    }

    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  MessageSending  $event
     * @return void
     */
    public function handle(MessageSending $event)
    {
        $args = [
            'personalizations' => [
                [
                    'custom_args' => [
                        'email_subject' => $event->message->getSubject(),
                        'domain' => settings('site_name'),
                    ],
                ],
            ],
        ];

        $args['personalizations'][0]['custom_args'] = array_merge( $args['personalizations'][0]['custom_args'], (new MailTrackerSetup($event->data))->getTrackingDetails());

        $args = $this->mergeCustomArgs($event, $args);

        $event->message->embed(new \Swift_Image(static::sgEncode($args), SendgridTransport::SMTP_API_NAME));
    }

    /**
     * @param $event
     * @param $args
     * @return mixed
     */
    private function mergeCustomArgs($event, $args)
    {
        if(count($event->message->getChildren())){
            foreach($event->message->getChildren() as $child){
                if($child instanceof \Swift_Image){
                    $params = json_decode($child->getBody(), true);

                    if(isset($params['personalizations'][0]['custom_args'])){
                        foreach($params['personalizations'][0]['custom_args'] as $key => $custom_arg) {
                            $args['personalizations'][0]['custom_args'][$key] = $custom_arg;
                        }
                    }
                }
            }
        }

        return $args;
    }
}

This is a dump of what the personalization array and $event->message are after this code runs. The part of the SwiftMessage that holds the personalization array if waaaay towards the bottom of the dump. You'll see it in a json string.

array:1 [
  "personalizations" => array:1 [
    0 => array:1 [
      "custom_args" => array:4 [
        "email_subject" => "Remote Start Quote 102cmlzspagej5p - UNDEFINED UNDEFINED UNDEFINED anything"
        "domain" => "Remotely Started"
        "tracking_id" => 13165
        "tracking_model" => "App\Models\Quote\Quote"
      ]
    ]
  ]
]
Swift_Message�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Message.php#L16�\^�]8;;�\ {#5087
  -headerSigners: []
  -bodySigners: []
  -savedMessage: []
  #userFormat: null
  #userCharset: "utf-8"
  #userDelSp: null
  -nestingLevel: 4096
  -headers: Swift_Mime_SimpleHeaderSet�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\SimpleHeaderSet.php#L16�\^�]8;;�\ {#5089
    -factory: Swift_Mime_SimpleHeaderFactory�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\SimpleHeaderFactory.php#L18�\^�]8;;�\ {#5090
      -encoder: Swift_Mime_HeaderEncoder_QpHeaderEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\HeaderEncoder\QpHeaderEncoder.php#L16�\^�]8;;�\ {#5091
        #charStream: Swift_CharacterStream_NgCharacterStream�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\CharacterStream\NgCharacterStream.php#L16�\^�]8;;�\ {#5080
          -charReader: null
          -charReaderFactory: Swift_CharacterReaderFactory_SimpleCharacterReaderFactory�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\CharacterReaderFactory\SimpleCharacterReaderFactory.php#L16�\^�]8;;�\ {#5081}
          -charset: "utf-8"
          -datas: ""
          -datasSize: 0
          -map: null
          -mapType: 0
          -charCount: 0
          -currentPos: 0
        }
        #filter: null
        #safeMap: array:68 [
          
        ]
      }
      -paramEncoder: Swift_Encoder_Rfc2231Encoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Encoder\Rfc2231Encoder.php#L16�\^�]8;;�\ {#5094
        -charStream: Swift_CharacterStream_NgCharacterStream�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\CharacterStream\NgCharacterStream.php#L16�\^�]8;;�\ {#5092
          -charReader: null
          -charReaderFactory: Swift_CharacterReaderFactory_SimpleCharacterReaderFactory�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\CharacterReaderFactory\SimpleCharacterReaderFactory.php#L16�\^�]8;;�\ {#5081}
          -charset: "utf-8"
          -datas: ""
          -datasSize: 0
          -map: null
          -mapType: 0
          -charCount: 0
          -currentPos: 0
        }
      }
      -emailValidator: Egulias\EmailValidator\EmailValidator�]8;;file://D:\rslaravel\vendor\egulias\email-validator\src\EmailValidator.php#L8�\^�]8;;�\ {#5093
        -lexer: Egulias\EmailValidator\EmailLexer�]8;;file://D:\rslaravel\vendor\egulias\email-validator\src\EmailLexer.php#L7�\^�]8;;�\ {#5097
          #charValue: array:28 [
            
          ]
          #hasInvalidTokens: false
          #previous: array:3 [
            "value" => "generated"
            "type" => 300
            "position" => 39
          ]
          +token: array:3 [
            "value" => ""
            "type" => null
            "position" => 0
          ]
          +lookahead: null
          -input: "[email protected]"
          -tokens: array:22 [
            
            ]
          ]
          -position: 22
          -peek: 0
          -regex: "/([a-zA-Z_]+[46]?)|([^\x00-\x7F])|([0-9]+)|(\r\n)|(::)|(\s+?)|(.)|[\xA0-\xff]+/iu"
        }
        #warnings: []
        #error: null
      }
      -charset: "utf-8"
      -addressEncoder: Swift_AddressEncoder_IdnAddressEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\AddressEncoder\IdnAddressEncoder.php#L25�\^�]8;;�\ {#5098}
    }
    -headers: array:9 [
      "content-transfer-encoding" => []
      "content-type" => array:1 [
        0 => Swift_Mime_Headers_ParameterizedHeader�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\Headers\ParameterizedHeader.php#L16�\^�]8;;�\ {#4749
          -paramEncoder: null
          -params: array:4 [
            "charset" => null
            "boundary" => "_=_swift_1708951240_14be803fe8c1d06de3618456fcb76b6a_=_"
            "format" => null
            "delsp" => null
          ]
          -value: "multipart/alternative"
          -name: "Content-Type"
          -encoder: Swift_Mime_HeaderEncoder_QpHeaderEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\HeaderEncoder\QpHeaderEncoder.php#L16�\^�]8;;�\ {#5091}
          -lineLength: 78
          -lang: null
          -charset: "utf-8"
          -cachedValue: null
        }
      ]
      "mime-version" => array:1 [
        0 => Swift_Mime_Headers_UnstructuredHeader�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\Headers\UnstructuredHeader.php#L16�\^�]8;;�\ {#4817
          -value: "1.0"
          -name: "MIME-Version"
          -encoder: Swift_Mime_HeaderEncoder_QpHeaderEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\HeaderEncoder\QpHeaderEncoder.php#L16�\^�]8;;�\ {#5091}
          -lineLength: 78
          -lang: null
          -charset: "utf-8"
          -cachedValue: null
        }
      ]
      "date" => array:1 [
        0 => Swift_Mime_Headers_DateHeader�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\Headers\DateHeader.php#L16�\^�]8;;�\ {#4326
          -dateTime: DateTimeImmutable @1708951240 {#4547
            date: 2024-02-26 06:40:40.255433 America/Chicago (-06:00)
          }
          -name: "Date"
          -encoder: null
          -lineLength: 78
          -lang: null
          -charset: "utf-8"
          -cachedValue: null
        }
      ]
      "message-id" => array:1 [
        0 => Swift_Mime_Headers_IdentificationHeader�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\Headers\IdentificationHeader.php#L20�\^�]8;;�\ {#4556
          -ids: array:1 [
            0 => "[email protected]"
          ]
          -emailValidator: Egulias\EmailValidator\EmailValidator�]8;;file://D:\rslaravel\vendor\egulias\email-validator\src\EmailValidator.php#L8�\^�]8;;�\ {#5093}
          -addressEncoder: Swift_AddressEncoder_IdnAddressEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\AddressEncoder\IdnAddressEncoder.php#L25�\^�]8;;�\ {#4824}
          -name: "Message-ID"
          -encoder: null
          -lineLength: 78
          -lang: null
          -charset: "utf-8"
          -cachedValue: null
        }
      ]
      "from" => array:1 [
        0 => Swift_Mime_Headers_MailboxHeader�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\Headers\MailboxHeader.php#L19�\^�]8;;�\ {#4553
          -mailboxes: array:1 [
            "[email protected]" => "RemotelyStartedMN.com"
          ]
          -emailValidator: Egulias\EmailValidator\EmailValidator�]8;;file://D:\rslaravel\vendor\egulias\email-validator\src\EmailValidator.php#L8�\^�]8;;�\ {#5093}
          -addressEncoder: Swift_AddressEncoder_IdnAddressEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\AddressEncoder\IdnAddressEncoder.php#L25�\^�]8;;�\ {#5098}
          -name: "From"
          -encoder: Swift_Mime_HeaderEncoder_QpHeaderEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\HeaderEncoder\QpHeaderEncoder.php#L16�\^�]8;;�\ {#5091}
          -lineLength: 78
          -lang: null
          -charset: "utf-8"
          -cachedValue: null
        }
      ]
      "subject" => array:1 [
        0 => Swift_Mime_Headers_UnstructuredHeader�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\Headers\UnstructuredHeader.php#L16�\^�]8;;�\ {#5083
          -value: "Remote Start Quote 102cmlzspagej5p - UNDEFINED UNDEFINED UNDEFINED anything"
          -name: "Subject"
          -encoder: Swift_Mime_HeaderEncoder_QpHeaderEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\HeaderEncoder\QpHeaderEncoder.php#L16�\^�]8;;�\ {#5091}
          -lineLength: 78
          -lang: null
          -charset: "utf-8"
          -cachedValue: null
        }
      ]
      "reply-to" => array:1 [
        0 => Swift_Mime_Headers_MailboxHeader�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\Headers\MailboxHeader.php#L19�\^�]8;;�\ {#5086
          -mailboxes: array:1 [
            "[email protected]" => "RemotelyStartedMN.com"
          ]
          -emailValidator: Egulias\EmailValidator\EmailValidator�]8;;file://D:\rslaravel\vendor\egulias\email-validator\src\EmailValidator.php#L8�\^�]8;;�\ {#5093}
          -addressEncoder: Swift_AddressEncoder_IdnAddressEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\AddressEncoder\IdnAddressEncoder.php#L25�\^�]8;;�\ {#5098}
          -name: "Reply-To"
          -encoder: Swift_Mime_HeaderEncoder_QpHeaderEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\HeaderEncoder\QpHeaderEncoder.php#L16�\^�]8;;�\ {#5091}
          -lineLength: 78
          -lang: null
          -charset: "utf-8"
          -cachedValue: null
        }
      ]
      "to" => array:1 [
        0 => Swift_Mime_Headers_MailboxHeader�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\Headers\MailboxHeader.php#L19�\^�]8;;�\ {#5077
          -mailboxes: array:1 [
            "[email protected]" => "102cmlzspagej5p"
          ]
          -emailValidator: Egulias\EmailValidator\EmailValidator�]8;;file://D:\rslaravel\vendor\egulias\email-validator\src\EmailValidator.php#L8�\^�]8;;�\ {#5093}
          -addressEncoder: Swift_AddressEncoder_IdnAddressEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\AddressEncoder\IdnAddressEncoder.php#L25�\^�]8;;�\ {#5098}
          -name: "To"
          -encoder: Swift_Mime_HeaderEncoder_QpHeaderEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\HeaderEncoder\QpHeaderEncoder.php#L16�\^�]8;;�\ {#5091}
          -lineLength: 78
          -lang: null
          -charset: "utf-8"
          -cachedValue: null
        }
      ]
    ]
    -order: array:16 [
      "return-path" => 0
      "received" => 1
      "dkim-signature" => 2
      "domainkey-signature" => 3
      "sender" => 4
      "message-id" => 5
      "date" => 6
      "subject" => 7
      "from" => 8
      "reply-to" => 9
      "to" => 10
      "cc" => 11
      "bcc" => 12
      "mime-version" => 13
      "content-type" => 14
      "content-transfer-encoding" => 15
    ]
    -required: array:3 [
      "date" => 0
      "message-id" => 1
      "from" => 2
    ]
    -charset: "utf-8"
  }
  -body: """
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n
    <html xmlns="http://www.w3.org/1999/xhtml">\n
    <head>\n
        <meta name="viewport" content="width=device-width, initial-scale=1.0">\n
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\n
    </head>\n
    
    </html>
    """
  -encoder: Swift_Mime_ContentEncoder_QpContentEncoderProxy�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\ContentEncoder\QpContentEncoderProxy.php#L18�\^�]8;;�\ {#5095
    -safeEncoder: Swift_Mime_ContentEncoder_QpContentEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\ContentEncoder\QpContentEncoder.php#L16�\^�]8;;�\ {#5096
      #dotEscape: false
      #charStream: Swift_CharacterStream_NgCharacterStream�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\CharacterStream\NgCharacterStream.php#L16�\^�]8;;�\ {#4650
        -charReader: null
        -charReaderFactory: Swift_CharacterReaderFactory_SimpleCharacterReaderFactory�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\CharacterReaderFactory\SimpleCharacterReaderFactory.php#L16�\^�]8;;�\ {#5081}
        -charset: "utf-8"
        -datas: ""
        -datasSize: 0
        -map: null
        -mapType: 0
        -charCount: 0
        -currentPos: 0
      }
      #filter: Swift_StreamFilters_ByteArrayReplacementFilter�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\StreamFilters\ByteArrayReplacementFilter.php#L18�\^�]8;;�\ {#4648
        -replace: array:3 [
          0 => array:2 [
            0 => 13
            1 => 10
          ]
          1 => array:2 [
            0 => 13
            1 => 10
          ]
          2 => array:2 [
            0 => 13
            1 => 10
          ]
        ]
        -index: array:2 [
          13 => true
          10 => true
        ]
        -tree: array:2 [
          13 => array:3 [
            10 => array:2 [
              -1 => 0
              -2 => 2
            ]
            -1 => 1
            -2 => 1
          ]
          10 => array:2 [
            -1 => 2
            -2 => 1
          ]
        ]
        -treeMaxLen: 2
        -repSize: array:3 [
          2 => 2
          1 => 2
          0 => 2
        ]
      }
      #safeMap: array:95 [
        
      ]
    }
    -nativeEncoder: Swift_Mime_ContentEncoder_NativeQpContentEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\ContentEncoder\NativeQpContentEncoder.php#L16�\^�]8;;�\ {#4649
      -charset: "utf-8"
    }
    -charset: "utf-8"
  }
  -idGenerator: Swift_Mime_IdGenerator�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\IdGenerator.php#L14�\^�]8;;�\ {#4652
    -idRight: "swift.generated"
  }
  -boundary: "_=_swift_1708951240_14be803fe8c1d06de3618456fcb76b6a_=_"
  -compositeRanges: array:3 [
    "multipart/mixed" => array:2 [
      0 => 16
      1 => 256
    ]
    "multipart/alternative" => array:2 [
      0 => 256
      1 => 4096
    ]
    "multipart/related" => array:2 [
      0 => 4096
      1 => 65536
    ]
  ]
  -compoundLevelFilters: array:1 [
    69632 => array:1 [
      4096 => array:2 [
        "text/plain" => 4096
        "text/html" => 65536
      ]
    ]
  ]
  -cache: Swift_KeyCache_DiskKeyCache�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\KeyCache\DiskKeyCache.php#L16�\^�]8;;�\ {#4530
    -stream: Swift_KeyCache_SimpleKeyCacheInputStream�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\KeyCache\SimpleKeyCacheInputStream.php#L16�\^�]8;;�\ {#4656
      -keyCache: null
      -nsKey: null
      -itemKey: null
      -writeThrough: null
    }
    -path: "C:\Users\fasts\AppData\Local\Temp"
    -keys: []
  }
  -immediateChildren: array:2 [
    0 => Swift_MimePart�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\MimePart.php#L16�\^�]8;;�\ {#5076
      #userFormat: null
      #userCharset: "utf-8"
      #userDelSp: null
      -nestingLevel: 4096
      -headers: Swift_Mime_SimpleHeaderSet�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\SimpleHeaderSet.php#L16�\^�]8;;�\ {#5078
        -factory: Swift_Mime_SimpleHeaderFactory�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\SimpleHeaderFactory.php#L18�\^�]8;;�\ {#5082
          -encoder: Swift_Mime_HeaderEncoder_QpHeaderEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\HeaderEncoder\QpHeaderEncoder.php#L16�\^�]8;;�\ {#5074
            #charStream: Swift_CharacterStream_NgCharacterStream�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\CharacterStream\NgCharacterStream.php#L16�\^�]8;;�\ {#5073
              -charReader: null
              -charReaderFactory: Swift_CharacterReaderFactory_SimpleCharacterReaderFactory�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\CharacterReaderFactory\SimpleCharacterReaderFactory.php#L16�\^�]8;;�\ {#5081}
              -charset: "utf-8"
              -datas: ""
              -datasSize: 0
              -map: null
              -mapType: 0
              -charCount: 0
              -currentPos: 0
            }
            #filter: null
            #safeMap: array:68 [
              
            ]
          }
          -paramEncoder: Swift_Encoder_Rfc2231Encoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Encoder\Rfc2231Encoder.php#L16�\^�]8;;�\ {#5075
            -charStream: Swift_CharacterStream_NgCharacterStream�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\CharacterStream\NgCharacterStream.php#L16�\^�]8;;�\ {#5070
              -charReader: null
              -charReaderFactory: Swift_CharacterReaderFactory_SimpleCharacterReaderFactory�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\CharacterReaderFactory\SimpleCharacterReaderFactory.php#L16�\^�]8;;�\ {#5081}
              -charset: "utf-8"
              -datas: ""
              -datasSize: 0
              -map: null
              -mapType: 0
              -charCount: 0
              -currentPos: 0
            }
          }
          -emailValidator: Egulias\EmailValidator\EmailValidator�]8;;file://D:\rslaravel\vendor\egulias\email-validator\src\EmailValidator.php#L8�\^�]8;;�\ {#5093}
          -charset: "utf-8"
          -addressEncoder: Swift_AddressEncoder_IdnAddressEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\AddressEncoder\IdnAddressEncoder.php#L25�\^�]8;;�\ {#5069}
        }
        -headers: array:2 [
          "content-transfer-encoding" => array:1 [
            0 => Swift_Mime_Headers_UnstructuredHeader�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\Headers\UnstructuredHeader.php#L16�\^�]8;;�\ {#5079
              -value: "quoted-printable"
              -name: "Content-Transfer-Encoding"
              -encoder: Swift_Mime_HeaderEncoder_QpHeaderEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\HeaderEncoder\QpHeaderEncoder.php#L16�\^�]8;;�\ {#5074}
              -lineLength: 78
              -lang: null
              -charset: "utf-8"
              -cachedValue: null
            }
          ]
          "content-type" => array:1 [
            0 => Swift_Mime_Headers_ParameterizedHeader�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\Headers\ParameterizedHeader.php#L16�\^�]8;;�\ {#5068
              -paramEncoder: null
              -params: array:1 [
                "charset" => "utf-8"
              ]
              -value: "text/plain"
              -name: "Content-Type"
              -encoder: Swift_Mime_HeaderEncoder_QpHeaderEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\HeaderEncoder\QpHeaderEncoder.php#L16�\^�]8;;�\ {#5074}
              -lineLength: 78
              -lang: null
              -charset: "utf-8"
              -cachedValue: null
            }
          ]
        ]
        -order: array:2 [
          "content-type" => 0
          "content-transfer-encoding" => 1
        ]
        -required: []
        -charset: "utf-8"
      }
      -body: """
       
        """
      -encoder: Swift_Mime_ContentEncoder_QpContentEncoderProxy�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\ContentEncoder\QpContentEncoderProxy.php#L18�\^�]8;;�\ {#5095}
      -idGenerator: Swift_Mime_IdGenerator�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\IdGenerator.php#L14�\^�]8;;�\ {#4652}
      -boundary: null
      -compositeRanges: array:3 [
        "multipart/mixed" => array:2 [
          0 => 16
          1 => 256
        ]
        "multipart/alternative" => array:2 [
          0 => 256
          1 => 4096
        ]
        "multipart/related" => array:2 [
          0 => 4096
          1 => 65536
        ]
      ]
      -compoundLevelFilters: array:1 [
        69632 => array:1 [
          4096 => array:2 [
            "text/plain" => 4096
            "text/html" => 65536
          ]
        ]
      ]
      -cache: Swift_KeyCache_DiskKeyCache�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\KeyCache\DiskKeyCache.php#L16�\^�]8;;�\ {#4530}
      -immediateChildren: []
      -children: []
      -maxLineLength: 78
      -alternativePartOrder: array:3 [
        "text/plain" => 1
        "text/html" => 2
        "multipart/related" => 3
      ]
      -id: "[email protected]"
      -cacheKey: "9e2120edad7d53694e66f0473a03ad78"
      #userContentType: "text/plain"
      -nestingLevel: 4096
    }
    1 => Swift_Mime_SimpleMimeEntity�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\SimpleMimeEntity.php#L16�\^�]8;;�\ {#5050
      -headers: Swift_Mime_SimpleHeaderSet�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\SimpleHeaderSet.php#L16�\^�]8;;�\ {#5049
        -factory: Swift_Mime_SimpleHeaderFactory�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\SimpleHeaderFactory.php#L18�\^�]8;;�\ {#5090}
        -headers: array:2 [
          "content-transfer-encoding" => []
          "content-type" => array:1 [
            0 => Swift_Mime_Headers_ParameterizedHeader�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\Headers\ParameterizedHeader.php#L16�\^�]8;;�\ {#5048
              -paramEncoder: null
              -params: array:1 [
                "boundary" => "_=_swift_1708951240_657b30b94e42e05c9b76e6c691afa97a_=_"
              ]
              -value: "multipart/related"
              -name: "Content-Type"
              -encoder: Swift_Mime_HeaderEncoder_QpHeaderEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\HeaderEncoder\QpHeaderEncoder.php#L16�\^�]8;;�\ {#5091}
              -lineLength: 78
              -lang: null
              -charset: "utf-8"
              -cachedValue: null
            }
          ]
        ]
        -order: array:2 [
          "content-type" => 0
          "content-transfer-encoding" => 1
        ]
        -required: []
        -charset: null
      }
      -body: null
      -encoder: Swift_Mime_ContentEncoder_QpContentEncoderProxy�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\ContentEncoder\QpContentEncoderProxy.php#L18�\^�]8;;�\ {#5095}
      -idGenerator: Swift_Mime_IdGenerator�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\IdGenerator.php#L14�\^�]8;;�\ {#4652}
      -boundary: "_=_swift_1708951240_657b30b94e42e05c9b76e6c691afa97a_=_"
      -compositeRanges: array:3 [
        "multipart/mixed" => array:2 [
          0 => 16
          1 => 256
        ]
        "multipart/alternative" => array:2 [
          0 => 256
          1 => 4096
        ]
        "multipart/related" => array:2 [
          0 => 4096
          1 => 65536
        ]
      ]
      -compoundLevelFilters: array:1 [
        69632 => array:1 [
          4096 => array:2 [
            "text/plain" => 4096
            "text/html" => 65536
          ]
        ]
      ]
      -nestingLevel: 4096
      -cache: Swift_KeyCache_DiskKeyCache�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\KeyCache\DiskKeyCache.php#L16�\^�]8;;�\ {#4530}
      -immediateChildren: array:1 [
        0 => Swift_Image�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Image.php#L16�\^�]8;;�\ {#5059
          -mimeTypes: array:986 [
            
          ]
          -headers: Swift_Mime_SimpleHeaderSet�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\SimpleHeaderSet.php#L16�\^�]8;;�\ {#5062
            -factory: Swift_Mime_SimpleHeaderFactory�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\SimpleHeaderFactory.php#L18�\^�]8;;�\ {#5061
              -encoder: Swift_Mime_HeaderEncoder_QpHeaderEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\HeaderEncoder\QpHeaderEncoder.php#L16�\^�]8;;�\ {#5053
                #charStream: Swift_CharacterStream_NgCharacterStream�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\CharacterStream\NgCharacterStream.php#L16�\^�]8;;�\ {#5052
                  -charReader: null
                  -charReaderFactory: Swift_CharacterReaderFactory_SimpleCharacterReaderFactory�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\CharacterReaderFactory\SimpleCharacterReaderFactory.php#L16�\^�]8;;�\ {#5081}
                  -charset: "utf-8"
                  -datas: ""
                  -datasSize: 0
                  -map: null
                  -mapType: 0
                  -charCount: 0
                  -currentPos: 0
                }
                #filter: null
                #safeMap: array:68 [
                  
                ]
              }
              -paramEncoder: Swift_Encoder_Rfc2231Encoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Encoder\Rfc2231Encoder.php#L16�\^�]8;;�\ {#5056
                -charStream: Swift_CharacterStream_NgCharacterStream�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\CharacterStream\NgCharacterStream.php#L16�\^�]8;;�\ {#5058
                  -charReader: null
                  -charReaderFactory: Swift_CharacterReaderFactory_SimpleCharacterReaderFactory�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\CharacterReaderFactory\SimpleCharacterReaderFactory.php#L16�\^�]8;;�\ {#5081}
                  -charset: "utf-8"
                  -datas: ""
                  -datasSize: 0
                  -map: null
                  -mapType: 0
                  -charCount: 0
                  -currentPos: 0
                }
              }
              -emailValidator: Egulias\EmailValidator\EmailValidator�]8;;file://D:\rslaravel\vendor\egulias\email-validator\src\EmailValidator.php#L8�\^�]8;;�\ {#5093}
              -charset: "utf-8"
              -addressEncoder: Swift_AddressEncoder_IdnAddressEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\AddressEncoder\IdnAddressEncoder.php#L25�\^�]8;;�\ {#5055}
            }
            -headers: array:4 [
              "content-transfer-encoding" => array:1 [
                0 => Swift_Mime_Headers_UnstructuredHeader�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\Headers\UnstructuredHeader.php#L16�\^�]8;;�\ {#5064
                  -value: "base64"
                  -name: "Content-Transfer-Encoding"
                  -encoder: Swift_Mime_HeaderEncoder_QpHeaderEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\HeaderEncoder\QpHeaderEncoder.php#L16�\^�]8;;�\ {#5053}
                  -lineLength: 78
                  -lang: null
                  -charset: "utf-8"
                  -cachedValue: null
                }
              ]
              "content-disposition" => array:1 [
                0 => Swift_Mime_Headers_ParameterizedHeader�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\Headers\ParameterizedHeader.php#L16�\^�]8;;�\ {#5054
                  -paramEncoder: Swift_Encoder_Rfc2231Encoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Encoder\Rfc2231Encoder.php#L16�\^�]8;;�\ {#5056}
                  -params: array:1 [
                    "filename" => "sendgrid/x-smtpapi"
                  ]
                  -value: "inline"
                  -name: "Content-Disposition"
                  -encoder: Swift_Mime_HeaderEncoder_QpHeaderEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\HeaderEncoder\QpHeaderEncoder.php#L16�\^�]8;;�\ {#5053}
                  -lineLength: 78
                  -lang: null
                  -charset: "utf-8"
                  -cachedValue: null
                }
              ]
              "content-type" => array:1 [
                0 => Swift_Mime_Headers_ParameterizedHeader�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\Headers\ParameterizedHeader.php#L16�\^�]8;;�\ {#5046
                  -paramEncoder: null
                  -params: array:1 [
                    "name" => "sendgrid/x-smtpapi"
                  ]
                  -value: "application/octet-stream"
                  -name: "Content-Type"
                  -encoder: Swift_Mime_HeaderEncoder_QpHeaderEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\HeaderEncoder\QpHeaderEncoder.php#L16�\^�]8;;�\ {#5053}
                  -lineLength: 78
                  -lang: null
                  -charset: "utf-8"
                  -cachedValue: null
                }
              ]
              "content-id" => array:1 [
                0 => Swift_Mime_Headers_IdentificationHeader�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\Headers\IdentificationHeader.php#L20�\^�]8;;�\ {#5045
                  -ids: array:1 [
                    0 => "[email protected]"
                  ]
                  -emailValidator: Egulias\EmailValidator\EmailValidator�]8;;file://D:\rslaravel\vendor\egulias\email-validator\src\EmailValidator.php#L8�\^�]8;;�\ {#5093}
                  -addressEncoder: Swift_AddressEncoder_IdnAddressEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\AddressEncoder\IdnAddressEncoder.php#L25�\^�]8;;�\ {#5051}
                  -name: "Content-ID"
                  -encoder: null
                  -lineLength: 78
                  -lang: null
                  -charset: "utf-8"
                  -cachedValue: null
                }
              ]
            ]
            -order: array:2 [
              "content-type" => 0
              "content-transfer-encoding" => 1
            ]
            -required: []
            -charset: "utf-8"
          }
          -body: "{"personalizations":[{"custom_args":{"email_subject":"Remote Start Quote 102cmlzspagej5p - UNDEFINED UNDEFINED UNDEFINED anything","domain":"Remotely Started","tracking_id":13165,"tracking_model":"App\Models\Quote\Quote"}}]}"
          -encoder: Swift_Mime_ContentEncoder_Base64ContentEncoder�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\ContentEncoder\Base64ContentEncoder.php#L16�\^�]8;;�\ {#5057}
          -idGenerator: Swift_Mime_IdGenerator�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\IdGenerator.php#L14�\^�]8;;�\ {#4652}
          -boundary: null
          -compositeRanges: array:3 [
            "multipart/mixed" => array:2 [
              0 => 16
              1 => 256
            ]
            "multipart/alternative" => array:2 [
              0 => 256
              1 => 4096
            ]
            "multipart/related" => array:2 [
              0 => 4096
              1 => 65536
            ]
          ]
          -compoundLevelFilters: array:1 [
            69632 => array:1 [
              4096 => array:2 [
                "text/plain" => 4096
                "text/html" => 65536
              ]
            ]
          ]
          -nestingLevel: 4096
          -cache: Swift_KeyCache_DiskKeyCache�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\KeyCache\DiskKeyCache.php#L16�\^�]8;;�\ {#4530}
          -immediateChildren: []
          -children: []
          -maxLineLength: 78
          -alternativePartOrder: array:3 [
            "text/plain" => 1
            "text/html" => 2
            "multipart/related" => 3
          ]
          -id: "[email protected]"
          -cacheKey: "1aec1b4352c9f3846f82e29e865851dd"
          #userContentType: "application/octet-stream"
        }
      ]
      -children: array:1 [
        0 => Swift_Image�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Image.php#L16�\^�]8;;�\ {#5059}
      ]
      -maxLineLength: 78
      -alternativePartOrder: array:3 [
        "text/plain" => 1
        "text/html" => 2
        "multipart/related" => 3
      ]
      -id: "[email protected]"
      -cacheKey: "0d8e412636fe01d6c53d2d854dd8e39f"
      #userContentType: null
    }
  ]
  -children: array:2 [
    0 => Swift_MimePart�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\MimePart.php#L16�\^�]8;;�\ {#5076}
    1 => Swift_Image�]8;;file://D:\rslaravel\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Image.php#L16�\^�]8;;�\ {#5059}
  ]
  -maxLineLength: 78
  -alternativePartOrder: array:3 [
    "text/plain" => 1
    "text/html" => 2
    "multipart/related" => 3
  ]
  -id: "[email protected]"
  -cacheKey: "c52e6fab18a60f2a0dda361278c2b813"
  #userContentType: "text/html"
  -nestingLevel: 4096
}
Process finished with exit code 1
0 likes
1 reply
fastsol's avatar

Turns out this was a really simple fix. After looking through the s-ichikawa/laravel-sendgrid-driver code, I found how it does it and changed one thing in the handle method of my code (I put a comment just above it in the code below). I honestly have no idea what the mergeCustomArgs method does for me. From my testing I don't think it ever actually applied anything to the args array anyway, at least in the context I've been using it. So I commented that out.

<?php

namespace App\Listeners;

use App\Helpers\Mail\MailTrackerSetup;
use Illuminate\Mail\Events\MessageSending;
use SendGrid\Mail\Header;
use Sichikawa\LaravelSendgridDriver\SendGrid;
use Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport;
use Symfony\Component\Mime\Header\Headers;
use Symfony\Component\Mime\Header\UnstructuredHeader;

/**
 * Class SetSendgridCustomArg
 * @package App\Listeners
 */
class SetSendgridCustomArg
{
    use SendGrid {
        sgEncode as encode;
    }

    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  MessageSending  $event
     * @return void
     */
    public function handle(MessageSending $event)
    {
        $args = [
            'personalizations' => [
                [
                    'custom_args' => [
                        'email_subject' => $event->message->getSubject(),
                        'domain' => settings('site_name'),
                    ],
                ],
            ],
        ];

        $args['personalizations'][0]['custom_args'] = array_merge( $args['personalizations'][0]['custom_args'], (new MailTrackerSetup($event->data))->getTrackingDetails());

//        $args = $this->mergeCustomArgs($event, $args);

      	// All I changed was this line.
        $event->message->embed(static::sgEncode($args), SendgridTransport::REQUEST_BODY_PARAMETER);
    }

    /**
     * @param $event
     * @param $args
     * @return mixed
     */
    private function mergeCustomArgs($event, $args)
    {
//        if(count($event->message->getChildren())){
//            foreach($event->message->getChildren() as $child){
//                if($child instanceof \Swift_Image){
//                    $params = json_decode($child->getBody(), true);
//
//                    if(isset($params['personalizations'][0]['custom_args'])){
//                        foreach($params['personalizations'][0]['custom_args'] as $key => $custom_arg) {
//                            $args['personalizations'][0]['custom_args'][$key] = $custom_arg;
//                        }
//                    }
//                }
//            }
//        }

        return $args;
    }
}

Please or to participate in this conversation.