Support » Plugin: Delete Me » Changing "from" email header

Viewing 14 replies - 1 through 14 (of 14 total)
  • Plugin Author cmc3215

    (@cmc3215)

    While there is no official option to change this, I can tell you how to change the source code fairly easily.

    1.) In your WordPress Dashboard go to Plugins > Editor

    2.) Select Delete Me from the dropdown at the top right

    3.) Click on the file “delete-me/inc/delete_user.php”

    4.) Press CTRL + F to find “wp_mail”

    5.) Above the line with “wp_mail” make a new line that reads …
    $email['headers'] = 'From: Example Name <name@example.com>' . "\r\n";

    6.) Then change the line with “wp_mail” to …
    wp_mail( $email['to'], $email['subject'], $email['message'], $email['headers'] );

    7.) Click “Update File” at the bottom to save changes.

    Plugin Author cmc3215

    (@cmc3215)

    Also, just fyi, if you want to use the current blog name and admin email dynamically you may use …
    $email['headers'] = 'From: ' . get_option( 'blogname' ) . ' <' . get_option( 'admin_email' ) . '>' . "\r\n";

    This would of course work well for multisite since the blog name and admin email are unique to each site.

    Thread Starter fmeynard@gmail.com

    (@fmeynardgmailcom)

    I get an error… not sure what Exactly i did wrong

    // E-mail notification
    if ( $this->option['settings']['email_notification'] == true ) :
    
    	$email = array();
    	$email['to'] = get_option( 'admin_email' );
    	$email['subject'] = 'Deleted User Notification';
    	$email['message'] =
    	'The following User has been Deleted from your site:' . "<br>" .
    	'Username: ' . $this->user_login . "\r\n" .;
    	$email['headers'] = 'From: My Babysitter Team <info@mybabysitter.ca>' . "\r\n";
    
    wp_mail( $email['to'], $email['subject'], $email['message'], $email['headers'] );
    
    endif;
    Plugin Author cmc3215

    (@cmc3215)

    It looks like from the snippet you posted you were also changing the $email[‘message’] variable because it’s missing the part where it lists off the deleted content and simply ends with the user name. Change the line that reads …
    'Username: ' . $this->user_login . "\r\n" .;

    to simply read …
    'Username: ' . $this->user_login;

    Also, the "<br>" should really be "\n\n", \n is used in text emails for new lines, <br> for html.

    Thread Starter fmeynard@gmail.com

    (@fmeynardgmailcom)

    Hi,

    Thanks for your help, i really appreciate it @cmc3215.
    However, that still didnt work 🙁 the user does get deleted but the email doesnt get sent out anymore.

    Also, I only tried inserting the <br> because the original emails coming from your plugin didnt have any line breaks and made the email pretty hard to read.

    Thread Starter fmeynard@gmail.com

    (@fmeynardgmailcom)

    Find attached the whole snippet of code, maybe i am missing something :S

    <?php
    // File called by class?
    if ( isset( $this ) == false || get_class( $this ) != 'plugin_delete_me' ) exit;
    
    // Does user have the capability?
    if ( current_user_can( $this->info['cap'] ) == false || ( is_multisite() && is_super_admin() ) ) return; // stop executing file
    
    // Does the trigger value match the currently logged in user ID?
    if ( empty( $this->user_ID ) || $this->GET[$this->info['trigger']] != $this->user_ID ) return; // stop executing file
    
    // Nonce
    if ( isset( $this->GET[$this->info['nonce']] ) == false || wp_verify_nonce( $this->GET[$this->info['nonce']], $this->info['nonce'] ) == false ) return; // stop executing file
    
    // Include required WordPress function files
    include_once( ABSPATH . WPINC . '/post.php' ); // wp_delete_post
    include_once( ABSPATH . 'wp-admin/includes/bookmark.php' ); // wp_delete_link
    include_once( ABSPATH . 'wp-admin/includes/comment.php' ); // wp_delete_comment
    include_once( ABSPATH . 'wp-admin/includes/user.php' ); // wp_delete_user, get_blogs_of_user
    
    if ( is_multisite() ) {
    
    	include_once( ABSPATH . WPINC . '/ms-functions.php' ); // remove_user_from_blog
    	include_once( ABSPATH . 'wp-admin/includes/ms.php' ); // wpmu_delete_user
    
    }
    
    // Posts
    //->>> Start: WordPress wp_delete_user Post types to delete
    $post_types_to_delete = array();
    
    foreach ( get_post_types( array(), 'objects' ) as $post_type ) {
    
    	if ( $post_type->delete_with_user ) {
    
    		$post_types_to_delete[] = $post_type->name;
    
    	} elseif ( null === $post_type->delete_with_user && post_type_supports( $post_type->name, 'author' ) ) {
    
    		$post_types_to_delete[] = $post_type->name;
    
    	}
    
    }
    
    $post_types_to_delete = apply_filters( 'post_types_to_delete_with_user', $post_types_to_delete, $this->user_ID );
    //<<<- End: WordPress wp_delete_user Post types to delete
    
    $posts_list = array();
    $posts = $this->wpdb->get_results( "SELECT <code>ID</code>, <code>post_title</code>, <code>post_type</code> FROM " . $this->wpdb->posts . " WHERE <code>post_author</code>='" . $this->user_ID . "' AND <code>post_type</code> IN ('" . implode( "', '", $post_types_to_delete ) . "')", ARRAY_A );
    
    foreach ( $posts as $post ) {
    
    	$posts_list[] = wp_specialchars_decode( $post['post_title'], ENT_QUOTES ) . "\n" . ucwords( $post['post_type'] ) . ' ' . get_permalink( $post['ID'] );
    
    }
    
    // Links
    $links_list = array();
    $links = $this->wpdb->get_results( "SELECT <code>link_id</code>, <code>link_url</code>, <code>link_name</code> FROM " . $this->wpdb->links . " WHERE <code>link_owner</code>='" . $this->user_ID . "'", ARRAY_A );
    
    foreach ( $links as $link ) {
    
    	$links_list[] = wp_specialchars_decode( $link['link_name'], ENT_QUOTES ) . "\n" . $link['link_url'];
    
    }
    
    // Comments
    $comments_list = array();
    
    if ( $this->option['settings']['delete_comments'] == true ) {
    
    	$comments = $this->wpdb->get_results( "SELECT <code>comment_ID</code> FROM " . $this->wpdb->comments . " WHERE <code>user_id</code>='" . $this->user_ID . "'", ARRAY_A );
    
    	foreach ( $comments as $comment ) {
    
    		$comments_list[] = $comment['comment_ID'];
    
    		// Delete comments if option set
    		wp_delete_comment( $comment['comment_ID'] );
    
    	}
    
    }
    
    // E-mail notification
    if ( $this->option['settings']['email_notification'] == true ) :
    
    	$email = array();
    	$email['headers'] = 'From: My Babysitter Team <info@mybabysitter.ca>' . "\r\n";
    	$email['to'] = get_option( 'admin_email' );
    	$email['subject'] = 'Deleted User Notification';
    	$email['message'] =
    	'The following User has been Deleted from your site:' . "\n\n" .
    	'Username: ' . $this->user_login;
    
    wp_mail(  $email['headers'], $email['to'], $email['subject'], $email['message'] );
    
    endif;
    
    // Delete user
    if ( is_multisite() && $this->option['settings']['ms_delete_from_network'] == true && count( get_blogs_of_user( $this->user_ID ) ) == 1 ) {
    
    	// Multisite: Deletes user's Posts and Links, then deletes from WP Users|Usermeta
    	// ONLY IF "Delete From Network" setting checked and user only belongs to this blog
    	wpmu_delete_user( $this->user_ID );
    
    } else {
    
    	// Deletes user's Posts and Links
    	// Multisite: Removes user from current blog
    	// Not Multisite: Deletes user from WP Users|Usermeta
    	wp_delete_user( $this->user_ID );
    
    }
    
    // Redirect to landing URL
    ( is_admin() ) ? wp_redirect( $this->option['settings']['your_profile_landing_url'] ) : wp_redirect( $this->option['settings']['shortcode_landing_url'] );
    
    exit;
    Plugin Author cmc3215

    (@cmc3215)

    // E-mail notification
    if ( $this->option['settings']['email_notification'] == true ) :
    
    	$email = array();
    	$email['to'] = get_option( 'admin_email' );
    	$email['subject'] = 'Deleted User Notification';
    	$email['message'] =
    	'The following User has been Deleted from your site:' . "\n\n" .
    	'Username: ' . $this->user_login;
    	$email['headers'] = 'From: My Babysitter Team <info@mybabysitter.ca>' . "\r\n";
    
    wp_mail( $email['to'], $email['subject'], $email['message'], $email['headers'] );
    
    endif;

    I put this code directly into my test WordPress install and I received the message. You can try putting

      My Babysitter Team

    into quotes as it technically should be, so “My Babysitter Team” <info@mybabysitter.ca> but it worked without them for me as well.

    The only other thing I can say is check your email spam folders and settings because the email code is working correctly.

    WordPress sends email in text/plain by default, if you’re seeing the email content all run together without line breaks then either the email client is display it as HTML or there is a plugin/setting in your WordPress install that’s changing outgoing wp_mail calls to text/html in which case feel free to use “<br>” as you were.

    Plugin Author cmc3215

    (@cmc3215)

    I see the problem, in the wp_mail call you placed the $email['headers'] into the first argument when it should be the last argument per my original post.

    For you convenience here is the whole page back with the corrected code placement …

    <?php
    // File called by class?
    if ( isset( $this ) == false || get_class( $this ) != 'plugin_delete_me' ) exit;
    
    // Does user have the capability?
    if ( current_user_can( $this->info['cap'] ) == false || ( is_multisite() && is_super_admin() ) ) return; // stop executing file
    
    // Does the trigger value match the currently logged in user ID?
    if ( empty( $this->user_ID ) || $this->GET[$this->info['trigger']] != $this->user_ID ) return; // stop executing file
    
    // Nonce
    if ( isset( $this->GET[$this->info['nonce']] ) == false || wp_verify_nonce( $this->GET[$this->info['nonce']], $this->info['nonce'] ) == false ) return; // stop executing file
    
    // Include required WordPress function files
    include_once( ABSPATH . WPINC . '/post.php' ); // wp_delete_post
    include_once( ABSPATH . 'wp-admin/includes/bookmark.php' ); // wp_delete_link
    include_once( ABSPATH . 'wp-admin/includes/comment.php' ); // wp_delete_comment
    include_once( ABSPATH . 'wp-admin/includes/user.php' ); // wp_delete_user, get_blogs_of_user
    
    if ( is_multisite() ) {
    
    	include_once( ABSPATH . WPINC . '/ms-functions.php' ); // remove_user_from_blog
    	include_once( ABSPATH . 'wp-admin/includes/ms.php' ); // wpmu_delete_user
    
    }
    
    // Posts
    //->>> Start: WordPress wp_delete_user Post types to delete
    $post_types_to_delete = array();
    
    foreach ( get_post_types( array(), 'objects' ) as $post_type ) {
    
    	if ( $post_type->delete_with_user ) {
    
    		$post_types_to_delete[] = $post_type->name;
    
    	} elseif ( null === $post_type->delete_with_user && post_type_supports( $post_type->name, 'author' ) ) {
    
    		$post_types_to_delete[] = $post_type->name;
    
    	}
    
    }
    
    $post_types_to_delete = apply_filters( 'post_types_to_delete_with_user', $post_types_to_delete, $this->user_ID );
    //<<<- End: WordPress wp_delete_user Post types to delete
    
    $posts_list = array();
    $posts = $this->wpdb->get_results( "SELECT ID, post_title, post_type FROM " . $this->wpdb->posts . " WHERE post_author='" . $this->user_ID . "' AND post_type IN ('" . implode( "', '", $post_types_to_delete ) . "')", ARRAY_A );
    
    foreach ( $posts as $post ) {
    
    	$posts_list[] = wp_specialchars_decode( $post['post_title'], ENT_QUOTES ) . "\n" . ucwords( $post['post_type'] ) . ' ' . get_permalink( $post['ID'] );
    
    }
    
    // Links
    $links_list = array();
    $links = $this->wpdb->get_results( "SELECT link_id, link_url, link_name FROM " . $this->wpdb->links . " WHERE link_owner='" . $this->user_ID . "'", ARRAY_A );
    
    foreach ( $links as $link ) {
    
    	$links_list[] = wp_specialchars_decode( $link['link_name'], ENT_QUOTES ) . "\n" . $link['link_url'];
    
    }
    
    // Comments
    $comments_list = array();
    
    if ( $this->option['settings']['delete_comments'] == true ) {
    
    	$comments = $this->wpdb->get_results( "SELECT comment_ID FROM " . $this->wpdb->comments . " WHERE user_id='" . $this->user_ID . "'", ARRAY_A );
    
    	foreach ( $comments as $comment ) {
    
    		$comments_list[] = $comment['comment_ID'];
    
    		// Delete comments if option set
    		wp_delete_comment( $comment['comment_ID'] );
    
    	}
    
    }
    
    // E-mail notification
    if ( $this->option['settings']['email_notification'] == true ) :
    
    	$email = array();
    	$email['to'] = get_option( 'admin_email' );
    	$email['subject'] = 'Deleted User Notification';
    	$email['message'] =
    	'The following User has been Deleted from your site:' . "\n\n" .
    	'Username: ' . $this->user_login;
    	$email['headers'] = 'From: My Babysitter Team <info@mybabysitter.ca>' . "\r\n";
    
    	wp_mail( $email['to'], $email['subject'], $email['message'], $email['headers'] );
    
    endif;
    
    // Delete user
    if ( is_multisite() && $this->option['settings']['ms_delete_from_network'] == true && count( get_blogs_of_user( $this->user_ID ) ) == 1 ) {
    
    	// Multisite: Deletes user's Posts and Links, then deletes from WP Users|Usermeta
    	// ONLY IF "Delete From Network" setting checked and user only belongs to this blog
    	wpmu_delete_user( $this->user_ID );
    
    } else {
    
    	// Deletes user's Posts and Links
    	// Multisite: Removes user from current blog
    	// Not Multisite: Deletes user from WP Users|Usermeta
    	wp_delete_user( $this->user_ID );
    
    }
    
    // Redirect to landing URL
    ( is_admin() ) ? wp_redirect( $this->option['settings']['your_profile_landing_url'] ) : wp_redirect( $this->option['settings']['shortcode_landing_url'] );
    
    exit;
    Thread Starter fmeynard@gmail.com

    (@fmeynardgmailcom)

    Thanks, that worked like a charm… and yes, they did end up going to the junk mail. Is there a way to avoid the spam filters and have it land on the inbox?

    And, i think you were right about the \n\n, they are html, so i have gone and changed them to line breaks instead.

    Plugin Author cmc3215

    (@cmc3215)

    Assuming “mybabysitter.ca” is the website this WordPress installation is on and Gmail is your email client. If so then you should just need to whitelist/allow the from address you’re using to bypass spam/junk folders.

    See http://onlinegroups.net/blog/2014/02/25/how-to-whitelist-an-email-address/

    Thread Starter fmeynard@gmail.com

    (@fmeynardgmailcom)

    Weird… since the last time i tried (and it worked) i’ve created and delted 3 more users and no mail comes in at all.

    On another note:
    I am currently using Server SMTP as the email client, all the other communications emails arrive to the inboxes everytime… only the ones coming from this plugin end up there…(or just reently, not there at all)
    any ideas?

    Plugin Author cmc3215

    (@cmc3215)

    Sorry to hear you’re still having problems.

    I can’t say why you’re server company or email client are not accepting the email with the “From:” address you’re using. There are often strict rules nowadays on the “From:” address user and/or domain to prevent spoofing and I’m guessing that’s what is interfering somehow. I would contact them for information on exactly what’s accepted.

    All I can do is confirm that the original plugin code and the modified page of code from my last post does work for sending email in WordPress. The method used is the proper way to change the “From:” header as documented in the codex, see link below …

    http://codex.wordpress.org/Function_Reference/wp_mail#Examples

    Thread Starter fmeynard@gmail.com

    (@fmeynardgmailcom)

    Not sure what was wrong to the code above.. but i reverted to a backup version of original file and only modified the email section and it now works fine.

    🙂 Thanks for all your help

    Question:

    what is the best way to keep this changes without updates affecting it?

    Plugin Author cmc3215

    (@cmc3215)

    Great, glad it’s resolved and you’re welcome.

    Far as updates go, I haven’t needed to update this in over a year and don’t have updates planned at the moment. I would just refer back to this post, it doesn’t get removed, and copy/paste the email section in again later if you do update or reinstall it.

Viewing 14 replies - 1 through 14 (of 14 total)
  • The topic ‘Changing "from" email header’ is closed to new replies.