*
* @return string
*/
public function get_headers( $additional_params = array() ) {
$mail_headers = '';
$from_address = $this->get_from__email_address();
if ( ! empty( $from_address ) ) {
$mail_headers .= 'From: ' . $this->get_from__name() . ' <' . $from_address . '> ' . "\r\n" ;
} else {
/* If we don't have an email from the input headers default to wordpress@$sitename
* Some hosts will block outgoing mail from this address if it doesn't exist but
* there's no easy alternative. Defaulting to admin_email might appear to be another
* option but some hosts may refuse to relay mail from an unknown domain. See
* https://core.trac.wordpress.org/ticket/5007.
*/
}
$mail_headers .= 'Content-Type: ' . $this->get_content_type() . "\r\n" ;
$mail_headers = apply_filters( 'wpbm_email_api_get_headers_after', $mail_headers, $this->id, $this->fields_values , $this->replace, $additional_params );
return $mail_headers;
}
/** Get Content of Email
*
* @return string
*/
public function get_content() {
if ( $this->get_email_content_type() == 'plain' ) {
$email_content = $this->esc_to_plain_text( $this->replace_shortcodes( $this->get_content_plain() ) );
} else {
$email_content = $this->replace_shortcodes( $this->get_content_html() );
}
$email_content = apply_filters( 'wpbm_email_api_get_content_after' , $email_content, $this->id, $this->get_email_content_type() );
// Remove all shortcodes, which is not replaced early.
$email_content = preg_replace ('/[\[\{][a-zA-Z0-9.,_-]{0,}[\]\}]/', '', $email_content);
return wordwrap( $email_content, 100 );
}
/** Get Email Content as Text (from Plain Text template)
*
* @return string
*/
function get_content_plain() {
//require_once( dirname(__FILE__) . '/emails_tpl/standard-text-tpl.php' );
//require_once( dirname(__FILE__) . '/emails_tpl/plain-text-tpl.php' );
if ( isset( $this->fields_values['template_file'] ) ) {
$email_tpl_name = $this->fields_values['template_file'];
} else {
$email_tpl_name = 'plain';
}
if ( file_exists( dirname(__FILE__) . '/emails_tpl/'. $email_tpl_name .'-text-tpl.php' ) )
require_once( dirname(__FILE__) . '/emails_tpl/'. $email_tpl_name .'-text-tpl.php' );
else
require_once( dirname(__FILE__) . '/emails_tpl/plain-text-tpl.php' );
$fields_values = $this->fields_values;
$fields_values = apply_filters( 'wpbm_email_api_get_content_before' , $fields_values, $this->id , 'plain' ); //Ability to parse 'content', 'header_content', 'footer_content' for different languges, etc ....
if ( function_exists( 'wpbm_email_template_' . $email_tpl_name . '_text' ) )
$plain_email = call_user_func_array( 'wpbm_email_template_' . $email_tpl_name . '_text' , array( $fields_values ) );
else
$plain_email = wpbm_email_template_text( $fields_values );
// Replace |
to \n
$plain_email = preg_replace( '/<(br|p)[\t\s]*[\/]?>/i', "\n", $plain_email );
// $plain_email = str_replace( array('
', '
'), "\n", $plain_email );
return $plain_email;
}
/** Get Email Content as HTML (from HTML template)
*
* @return type
*/
function get_content_html() {
// Load specific Email Template: ///////////////////////////////////
if ( isset( $this->fields_values['template_file'] ) ) {
$email_tpl_name = $this->fields_values['template_file'];
} else {
$email_tpl_name = 'plain';
}
//require_once( dirname(__FILE__) . '/emails_tpl/standard-html-tpl.php' );
//require_once( dirname(__FILE__) . '/emails_tpl/plain-html-tpl.php' );
if ( file_exists( dirname(__FILE__) . '/emails_tpl/'. $email_tpl_name .'-html-tpl.php' ) )
require_once( dirname(__FILE__) . '/emails_tpl/'. $email_tpl_name .'-html-tpl.php' );
else
require_once( dirname(__FILE__) . '/emails_tpl/plain-html-tpl.php' );
////////////////////////////////////////////////////////////////////
$fields_values = $this->fields_values;
$fields_values = apply_filters( 'wpbm_email_api_get_content_before' , $fields_values, $this->id , 'html' ); //Ability to parse 'content', 'header_content', 'footer_content' for different languges, etc ....
if ( function_exists( 'wpbm_email_template_' . $email_tpl_name . '_html' ) )
$html_email = call_user_func_array( 'wpbm_email_template_' . $email_tpl_name . '_html' , array( $fields_values ) );
else
$html_email = wpbm_email_template_html( $fields_values );
return $html_email;
}
/** Get escaped Email Subject
*
* @return string
*/
public function get_subject() {
$subject = $this->fields_values['subject'];
$subject = apply_filters( 'wpbm_email_api_get_subject_before' , $subject, $this->id );
$subject = $this->esc_to_plain_text( $this->replace_shortcodes( $subject ) );
$subject = apply_filters( 'wpbm_email_api_get_subject_after' , $subject, $this->id );
return $subject;
}
/** Get escapeed Name from any not supporting characters
*
* @return string
*/
public function get_from__name() {
return wp_specialchars_decode( esc_html( stripslashes( $this->fields_values['from_name'] ) ), ENT_QUOTES );
}
/** Get sanitized Email address
*
* @return type
*/
public function get_from__email_address() {
return sanitize_email( $this->fields_values['from'] );
}
/** For future support, right now does not support
*
* @return empty string
*/
public function get_attachments() {
return '';
}
/** Check email and format it
*
* @param string $emails
* @return string
*/
public function validate_emails( $emails ) {
$emails = str_replace(';', ',', $emails);
if ( !is_array( $emails ) )
$emails = explode( ',', $emails );
$emails_list = array();
foreach ( (array) $emails as $recipient ) {
// Break $recipient into name and address parts if in the format "Foo "
$recipient_name = '';
if( preg_match( '/(.*)<(.+)>/', $recipient, $matches ) ) {
if ( count( $matches ) == 3 ) {
$recipient_name = $matches[1];
$recipient = $matches[2];
}
} else {
// Check about correct format of email
if( preg_match( '/([\w\.\-_]+)?\w+@[\w\-_]+(\.\w+){1,}/im', $recipient, $matches ) ) { //FixIn: 2.0.15.1
$recipient = $matches[0];
}
}
//$recipient_name = str_replace('"', '', $recipient_name);
$recipient_name = trim( wp_specialchars_decode( esc_html( stripslashes( $recipient_name ) ), ENT_QUOTES ) );
$emails_list[] = ( empty( $recipient_name ) ? '' : $recipient_name . ' ' )
. '<' . sanitize_email( $recipient ) . '>';
}
$emails_list = implode( ',', $emails_list );
return $emails_list;
}
/**
* Make Email Sending by using wp_mail standard function.
*
* @param string $to - Email
* @param array $replace - accociated array of values to replace in email Body and Subject. Exmaple: array( 'name' => 'Jo', 'secondname' => 'Smith' )
* @return boolean Sent or Failed to send.
*/
public function send( $to = '', $replace = array() ) {
$return = false;
// if ( empty( $to ) )
// return $return;
$this->sending = true;
$this->set_replace( $replace );
$to = $this->validate_emails( $to );
$subject = $this->get_subject();
$message = $this->get_content();
$headers = $this->get_headers();
$attachments = $this->get_attachments();
//debuge('In email', htmlentities($to), $subject, htmlentities($message), $headers, $attachments) ;
$is_send_email = true;
$is_send_email = apply_filters( 'wpbm_email_api_is_allow_send', $is_send_email, $this->id, $this->fields_values );
if ( $is_send_email )
$return = wp_mail( $to, $subject, $message, $headers, $attachments );
$this->sending = false;
// Send Copy to admin email
if (
( isset( $this->fields_values['copy_to_admin'] ) )
&& ( $this->fields_values['copy_to_admin'] == 'On' )
){
$this->sending = true;
$subject = __('Email copy to', 'booking-manager') . ' ' . str_replace( array( '<', '>' ), '', $to) . ' - ' . $subject;
$headers = $this->get_headers( array( 'reply' => $to ) );
$to = $this->validate_emails( $this->get_from__name() . ' <' . $this->get_from__email_address() . '> ' );
$is_send_email = apply_filters( 'wpbm_email_api_is_allow_send_copy', $is_send_email, $this->id, $this->fields_values );
if ( $is_send_email )
$return_copy = wp_mail( $to, $subject, $message, $headers, $attachments );
$this->sending = false;
}
$this->set_replace(); // Reset replace parameter
return $return;
}
//