0
votes

I’m having problems getting the sender's email address,

$single_message = $gmail->users_messages->get('me', $msg_id);

"from" usually yields the senders name

To get the email address I have this code

if($partes->getName() == 'Authentication-Results')
{
    $outh_res = $partes->getValue();
    if(strpos($outh_res, 'smtp.mailfrom=') !== false)
    {
        $bits = explode('smtp.mailfrom=',$outh_res);
        $mail = $bits[1];
        if(strpos($mail, ';') !== false)
        {
            $bits = explode(';',$mail);
            $mail = str_replace('"', '',$bits[0]);
        }
    }
}

That always gives me an email, but when the sender is behind mail chimp (or their own servers (postfix)) for example: [email protected]

In the best case I receive @sendermail.com (from gmail itself I know its [email protected]) so it's useless In some cases

if($partes->getName() == 'Reply-To')
{
    $other_mail = str_replace('"', '',$partes->getValue());
}

Gives me a helpful email others just the senders name

as suggested in github php gmail api issue # 521 and other places

$only_header = $gmail->users_messages->get('me',$msg_id, ['format' => 'metadata', 'metadataHeaders' => ['To','X-Original-To','X-Original-From','From','Reply-To','Subject']]);

It gives exactly the same info.

Is there any way that the api gives me exactly the sender email address even if it's behind mail chimp or other 3rd party sender?

There's a similar answer Get sender email from gmail-api, I already loop the headers and tried zingzinco's answer.

Edit: Thanks to Joey Tawadrous;

Php code:

if($partes->getName() == 'From')
{
    $raw_from = $partes->getValue();
    if(strpos($raw_from, '<') !== false)
    {
        $bit = explode('<',$raw_from);
        $bit2 = explode('>',$bit[1]);
        $final_email = $bit2[0];
        $sender_name = str_replace('"', '',$bit[0]);
    }
    else 
    {
        $sender_name = limpiarm(str_replace('"', '',$raw_from));
    }
}
1

1 Answers

0
votes
var email = '';

var messageFrom = _.where(message.payload.headers, {name: 'From'})[0].value;

    if(messageFrom.includes('<')) {
        var fromObj = messageFrom.split('<');
        email = fromObj[1];

        fromObj = email.split('>');
        email = fromObj[0];
    }


return email;