WordPress.org

Ready to get started?Download WordPress

Forums

wpMandrill
Suggested addition for wp_mail native fallback (1 post)

  1. scottconnerly
    Member
    Posted 1 year ago #

    add_filter('wp_mail', 'wp_mail_mandrill_bcc');
    
    function wp_mail_mandrill_bcc($args) {
    //If this is a message that was attempted to be sent by Mandrill and then fell back to wp_mail_native
    //Assume preserverecipients was enabled, just to be safe
    //Then move all of the 'To' recipients (except the From) to the BCC header
    	extract($args);
    
    	$mandrill_native = false;
    	$backtrace = debug_backtrace();
    	foreach($backtrace as $traced) {
    		if(!empty($traced['class']) && $traced['class'] == 'wpMandrill' && $traced['function'] == 'wp_mail_native') {
    			$mandrill_native = true;
    		}
    	}
    	if($mandrill_native) {
    		if( !is_array($to) ) {
    			$to = explode(',', $to);
    			foreach($to as $k => $t) {
    				$to[$k] = trim($t);
    			}
    		}
    		if( !is_array( $headers ) )
    			$headers = explode( "\n", str_replace( "\r\n", "\n", $headers ) );
    
    		$from_email = get_option('admin_email'); //default. Could also choose to get Mandrill's default FROM Email...
    		$bccs = array();
    		$bcc_index = -1;
    		foreach($headers as $header_index => $header) {
    			if ( strpos($header, ':') === false ) continue;
    			list( $name, $content ) = explode( ':', trim( $header ), 2 );
    			$name    = trim( $name    );
    			$content = trim( $content );
    
    			switch ( strtolower( $name ) ) {
    			case 'from':
    				if ( strpos($content, '<' ) !== false ) {
    					// So... making my life hard again?
    					$from_email = substr( $content, strpos( $content, '<' ) + 1 );
    					$from_email = str_replace( '>', '', $from_email );
    					$content = trim( $from_email );
    				}
    				$from_email = trim( $content );
    				break;
    			case 'bcc': //BCCs are unlikely here, but might as well code it properly
    				$bcc_index = $header_index;
    				$bccs = explode(',',$content);
    				foreach($bccs as $k => $bcc) {
    					$bccs[$k] = trim($bcc);
    				}
    				break;
    			}
    		}
    		$bccs = array_merge($bccs, $to);
    		$bcc = implode(',', $bccs);
    		if($bcc_index >= 0)
    			$headers[$bcc_index] = "Bcc: $bcc";
    		else
    			$headers[] = "Bcc: $bcc";
    
    		$to = $from_email;
    	}
    	//now, there's no way to be sure this message sent. The whole thing could fail and we'd never really know.
    	return compact( 'to', 'subject', 'message', 'headers', 'attachments' );
    }

    http://wordpress.org/extend/plugins/wpmandrill/

Topic Closed

This topic has been closed to new replies.

About this Plugin

About this Topic

Tags

No tags yet.