admin管理员组

文章数量:1417537

I need a way to query the sender's email address before delivery is attempted, and then set wp_mail arguments depending on the results.

So something like the following:

  • If sender_email contains @domain then continue
  • Else, if sender_email doesn't contain @domain, update wp_mail headers before sending

Use case is basically this:

I'm authenticating domain email using Postmark, so email will only send successfully if the sender's address matches an authenticated domain in my Postmark account.

What I want to do is create a check before it tries to send through Postmark, and if it's not an authenticated email address then send using wp_mail (WordPress's default mailing system) instead.

Or, put another way, ONLY send email through Postmark if it matches a specific domain or email address (which we can set manually).

I need a way to query the sender's email address before delivery is attempted, and then set wp_mail arguments depending on the results.

So something like the following:

  • If sender_email contains @domain then continue
  • Else, if sender_email doesn't contain @domain, update wp_mail headers before sending

Use case is basically this:

I'm authenticating domain email using Postmark, so email will only send successfully if the sender's address matches an authenticated domain in my Postmark account.

What I want to do is create a check before it tries to send through Postmark, and if it's not an authenticated email address then send using wp_mail (WordPress's default mailing system) instead.

Or, put another way, ONLY send email through Postmark if it matches a specific domain or email address (which we can set manually).

Share Improve this question asked Aug 1, 2019 at 16:33 jongoesonjongoeson 635 bronze badges 2
  • Are you using some plugin to connect your WP site with Postmark or have you written custom code for it? The first things that come to my mind are the wp_mail filter and phpmailer_init action that you could perhaps take a look at. – Antti Koskinen Commented Aug 2, 2019 at 21:59
  • Hey @AnttiKoskinen! I'm using Postmark's own plugin, which links with their API. But according to them I can override Postmark's sending by setting wp_mail headers. I just need to run an "if" check to check the sender's email before I do. – jongoeson Commented Aug 2, 2019 at 22:43
Add a comment  | 

1 Answer 1

Reset to default 1

Perhpaps wp_mailwould be a suitable filter for this case as it is the first one to fire in wp_mail(). So perhaps something as simple as this might work,

// For reference:
// $atts = array(
//   'to' => string, 
//   'subject' => string, 
//   'message' => string, 
//   'headers' => string or array (I think), 
//   'attachments' => array,
// );
function filter_wp_mail( $atts ) {
  if ( false === strpos( '@domain', $atts['to'] ) ) {
    $atts['headers'] .= "Postmark: not valid email\n";
  }
  return $atts;
}
add_filter( 'wp_mail', 'filter_wp_mail' );

本文标签: wp mailHow do I set wpmail argumentsmanually force wpmail sending based on the sender39s email address