: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
namespace WPForms\Emails;
use WPForms\Emails\Templates\General;
* Mailer class to wrap wp_mail().
* Array or comma-separated list of email addresses to send message.
* CC addresses (comma delimited).
* @param string $key Property name.
* @param string $value Property value.
public function __set( $key, $value ) {
* @param string $key Property name.
public function __get( $key ) {
* Check if a property exists.
* @param string $key Property name.
public function __isset( $key ) {
return isset( $this->key );
* @param string $key Property name.
public function __unset( $key ) {
* Email kill switch if needed.
public function is_email_disabled() {
return (bool) \apply_filters( 'wpforms_emails_mailer_is_email_disabled', false, $this );
* @uses \wpforms_decode_string()
* @since 1.6.0 Deprecated param: $linebreaks. This is handled by wpforms_decode_string().
* @param string $string String that may contain tags.
public function sanitize( $string = '' ) {
return \wpforms_decode_string( $string );
* Get the email from name.
public function get_from_name() {
$this->from_name = $this->from_name ? $this->sanitize( $this->from_name ) : \get_bloginfo( 'name' );
return \apply_filters( 'wpforms_emails_mailer_get_from_name', $this->from_name, $this );
* Get the email from address.
public function get_from_address() {
$this->from_address = $this->from_address ? $this->sanitize( $this->from_address ) : \get_option( 'admin_email' );
return \apply_filters( 'wpforms_emails_mailer_get_from_address', $this->from_address, $this );
* Get the email reply to address.
public function get_reply_to_address() {
if ( empty( $this->reply_to ) || ! \is_email( $this->reply_to ) ) {
$this->reply_to = $this->from_address;
$this->reply_to = $this->sanitize( $this->reply_to );
if ( empty( $this->reply_to ) || ! \is_email( $this->reply_to ) ) {
$this->reply_to = \get_option( 'admin_email' );
return \apply_filters( 'wpforms_emails_mailer_get_reply_to_address', $this->reply_to, $this );
* Get the email carbon copy addresses.
* @since 1.8.9 Allow using CC field as an array.
* @return string The email carbon copy addresses.
public function get_cc_address() {
if ( is_array( $this->cc ) ) {
$this->cc = implode( ',', $this->cc );
if ( empty( $this->cc ) ) {
* Filters the email carbon copy addresses.
* @param string $cc Carbon copy addresses.
* @param Mailer $this Mailer instance.
return apply_filters( 'wpforms_emails_mailer_get_cc_address', $this->cc, $this );
$this->cc = $this->sanitize( $this->cc );
$addresses = array_filter( array_map( 'sanitize_email', explode( ',', $this->cc ) ) );
$this->cc = implode( ',', $addresses );
/** This filter is documented in src/Emails/Mailer.php. */
return apply_filters( 'wpforms_emails_mailer_get_cc_address', $this->cc, $this );
* Get the email content type.
* @return string The email content type.
public function get_content_type() {
$is_html = ! Helpers::is_plain_text_template();
if ( ! $this->content_type && $is_html ) {
$this->content_type = \apply_filters( 'wpforms_emails_mailer_get_content_type_default', 'text/html', $this );
} elseif ( ! $is_html ) {
$this->content_type = 'text/plain';
return \apply_filters( 'wpforms_emails_mailer_get_content_type', $this->content_type, $this );
* @return string The email subject.
private function get_subject() {
if ( empty( $this->subject ) ) {
$this->subject = __( 'New Email Submit', 'wpforms-lite' );
* Filters the email subject.
* @param string $subject Email subject.
* @param Mailer $this Mailer instance.
return apply_filters( 'wpforms_emails_mailer_get_subject', $this->subject, $this );
* @return string The email message.
public function get_message() {
if ( empty( $this->message ) && ! empty( $this->template ) ) {
$this->message = $this->template->get();
return \apply_filters( 'wpforms_emails_mailer_get_message', $this->message, $this );
* @return string The email headers.
public function get_headers() {
return \apply_filters( 'wpforms_emails_mailer_get_headers', $this->headers, $this );
$this->headers = "From: {$this->get_from_name()} <{$this->get_from_address()}>\r\n";
if ( $this->get_reply_to_address() ) {
$this->headers .= "Reply-To: {$this->get_reply_to_address()}\r\n";
if ( $this->get_cc_address() ) {
$this->headers .= "Cc: {$this->get_cc_address()}\r\n";
$this->headers .= "Content-Type: {$this->get_content_type()}; charset=utf-8\r\n";
return \apply_filters( 'wpforms_emails_mailer_get_headers', $this->headers, $this );
* Get the email attachments.
* @return string|string[]
public function get_attachments() {
if ( $this->attachments === null ) {
* Filters the email attachments.
* @param string|string[] $attachments Array or string with attachment paths.
* @param Mailer $this Mailer instance.
return apply_filters( 'wpforms_emails_mailer_get_attachments', $this->attachments, $this );
* Set email address to send to.
* @param string|string[] $email Array or comma-separated list of email addresses to send message.
public function to_email( $email ) {
if ( is_string( $email ) ) {
$email = explode( ',', $email );
$this->to_email = \apply_filters( 'wpforms_emails_mailer_to_email', $email, $this );
* @param string $subject Email subject.
public function subject( $subject ) {
$subject = $this->sanitize( $subject );
$this->subject = \apply_filters( 'wpforms_emails_mailer_subject', $subject, $this );
* Set email message (body).
* @param string $message Email message.
public function message( $message ) {
$this->message = \apply_filters( 'wpforms_emails_mailer_message', $message, $this );
* @param General $template Email template.
public function template( General $template ) {
$this->template = \apply_filters( 'wpforms_emails_mailer_template', $template, $this );
protected function get_errors() {
foreach ( (array) $this->to_email as $email ) {
if ( ! is_email( $email ) ) {
$errors[] = sprintf( /* translators: %1$s - namespaced class name, %2$s - invalid email. */
esc_html__( '%1$s Invalid email address %2$s.', 'wpforms-lite' ),
'[WPForms\Emails\Mailer]',
if ( empty( $this->get_subject() ) ) {
$errors[] = sprintf( /* translators: %s - namespaced class name. */
esc_html__( '%s Empty subject line.', 'wpforms-lite' ),
'[WPForms\Emails\Mailer]'
if ( empty( $this->get_message() ) ) {
$errors[] = sprintf( /* translators: %s - namespaced class name. */
esc_html__( '%s Empty message.', 'wpforms-lite' ),
'[WPForms\Emails\Mailer]'