File "mail.php"
Full path: /home/kosmetik/public_html/wp-content/plugins/contact-form-7/includes/mail.php
File
size: 13.1 B
MIME-type: text/x-php
Charset: utf-8
Download Open Edit Advanced Editor Back
<?php
class WPCF7_Mail
{
private static $current = null;
private $name = '';
private $locale = '';
private $template = array();
private $use_html = false;
private $exclude_blank = false;
public static function get_current()
{
return self::$current;
}
public static function send($template, $name = '')
{
self::$current = new self($name, $template);
return self::$current->compose();
}
private function __construct($name, $template)
{
$this->name = trim($name);
$this->use_html = !empty($template['use_html']);
$this->exclude_blank = !empty($template['exclude_blank']);
$this->template = wp_parse_args($template, array('subject' => '', 'sender' => '', 'body' => '', 'recipient' => '', 'additional_headers' => '', 'attachments' => ''));
if ($submission = WPCF7_Submission::get_instance()) {
$contact_form = $submission->get_contact_form();
$this->locale = $contact_form->locale();
}
}
public function name()
{
return $this->name;
}
public function get($component, $replace_tags = false)
{
$use_html = $this->use_html && 'body' == $component;
$exclude_blank = $this->exclude_blank && 'body' == $component;
$template = $this->template;
$component = isset($template[$component]) ? $template[$component] : '';
if ($replace_tags) {
$component = $this->replace_tags($component, array('html' => $use_html, 'exclude_blank' => $exclude_blank));
if ($use_html and !preg_match('%<html[>\\s].*</html>%is', $component)) {
$component = $this->htmlize($component);
}
}
return $component;
}
private function htmlize($body)
{
if ($this->locale) {
$lang_atts = sprintf(' %s', wpcf7_format_atts(array('dir' => wpcf7_is_rtl($this->locale) ? 'rtl' : 'ltr', 'lang' => str_replace('_', '-', $this->locale))));
} else {
$lang_atts = '';
}
$header = apply_filters('wpcf7_mail_html_header', '<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml"' . $lang_atts . '>
<head>
<title>' . esc_html($this->get('subject', true)) . '</title>
</head>
<body>
', $this);
$footer = apply_filters('wpcf7_mail_html_footer', '</body>
</html>', $this);
$html = $header . wpautop($body) . $footer;
return $html;
}
private function compose($send = true)
{
$components = array('subject' => $this->get('subject', true), 'sender' => $this->get('sender', true), 'body' => $this->get('body', true), 'recipient' => $this->get('recipient', true), 'additional_headers' => $this->get('additional_headers', true), 'attachments' => $this->attachments());
$components = apply_filters('wpcf7_mail_components', $components, wpcf7_get_current_contact_form(), $this);
if (!$send) {
return $components;
}
$subject = wpcf7_strip_newline($components['subject']);
$sender = wpcf7_strip_newline($components['sender']);
$recipient = wpcf7_strip_newline($components['recipient']);
$body = $components['body'];
$additional_headers = trim($components['additional_headers']);
$headers = "From: {$sender}\n";
if ($this->use_html) {
$headers .= "Content-Type: text/html\n";
$headers .= "X-WPCF7-Content-Type: text/html\n";
} else {
$headers .= "X-WPCF7-Content-Type: text/plain\n";
}
if ($additional_headers) {
$headers .= $additional_headers . "\n";
}
$attachments = array_filter((array) $components['attachments'], function ($attachment) {
$path = path_join(WP_CONTENT_DIR, $attachment);
if (!wpcf7_is_file_path_in_content_dir($path)) {
if (WP_DEBUG) {
trigger_error(sprintf(__('Failed to attach a file. %s is not in the allowed directory.', 'contact-form-7'), $path), E_USER_NOTICE);
}
return false;
}
if (!is_readable($path) or !is_file($path)) {
if (WP_DEBUG) {
trigger_error(sprintf(__('Failed to attach a file. %s is not a readable file.', 'contact-form-7'), $path), E_USER_NOTICE);
}
return false;
}
static $total_size = array();
if (!isset($total_size[$this->name])) {
$total_size[$this->name] = 0;
}
$file_size = (int) @filesize($path);
if (25 * MB_IN_BYTES < $total_size[$this->name] + $file_size) {
if (WP_DEBUG) {
trigger_error(__('Failed to attach a file. The total file size exceeds the limit of 25 megabytes.', 'contact-form-7'), E_USER_NOTICE);
}
return false;
}
$total_size[$this->name] += $file_size;
return true;
});
return wp_mail($recipient, $subject, $body, $headers, $attachments);
}
public function replace_tags($content, $args = '')
{
if (true === $args) {
$args = array('html' => true);
}
$args = wp_parse_args($args, array('html' => false, 'exclude_blank' => false));
return wpcf7_mail_replace_tags($content, $args);
}
private function attachments($template = null)
{
if (!$template) {
$template = $this->get('attachments');
}
$attachments = array();
if ($submission = WPCF7_Submission::get_instance()) {
$uploaded_files = $submission->uploaded_files();
foreach ((array) $uploaded_files as $name => $paths) {
if (false !== strpos($template, "[{$name}]")) {
$attachments = array_merge($attachments, (array) $paths);
}
}
}
foreach (explode("\n", $template) as $line) {
$line = trim($line);
if ('' === $line or '[' == substr($line, 0, 1)) {
continue;
}
$attachments[] = path_join(WP_CONTENT_DIR, $line);
}
if ($submission = WPCF7_Submission::get_instance()) {
$attachments = array_merge($attachments, (array) $submission->extra_attachments($this->name));
}
return $attachments;
}
}
function wpcf7_mail_replace_tags($content, $args = '')
{
$args = wp_parse_args($args, array('html' => false, 'exclude_blank' => false));
if (is_array($content)) {
foreach ($content as $key => $value) {
$content[$key] = wpcf7_mail_replace_tags($value, $args);
}
return $content;
}
$content = explode("\n", $content);
foreach ($content as $num => $line) {
$line = new WPCF7_MailTaggedText($line, $args);
$replaced = $line->replace_tags();
if ($args['exclude_blank']) {
$replaced_tags = $line->get_replaced_tags();
if (empty($replaced_tags) or array_filter($replaced_tags, 'strlen')) {
$content[$num] = $replaced;
} else {
unset($content[$num]);
}
} else {
$content[$num] = $replaced;
}
}
$content = implode("\n", $content);
return $content;
}
add_action('phpmailer_init', 'wpcf7_phpmailer_init', 10, 1);
function wpcf7_phpmailer_init($phpmailer)
{
$custom_headers = $phpmailer->getCustomHeaders();
$phpmailer->clearCustomHeaders();
$wpcf7_content_type = false;
foreach ((array) $custom_headers as $custom_header) {
$name = $custom_header[0];
$value = $custom_header[1];
if ('X-WPCF7-Content-Type' === $name) {
$wpcf7_content_type = trim($value);
} else {
$phpmailer->addCustomHeader($name, $value);
}
}
if ('text/html' === $wpcf7_content_type) {
$phpmailer->msgHTML($phpmailer->Body);
} elseif ('text/plain' === $wpcf7_content_type) {
$phpmailer->AltBody = '';
}
}
class WPCF7_MailTaggedText
{
private $html = false;
private $callback = null;
private $content = '';
private $replaced_tags = array();
public function __construct($content, $args = '')
{
$args = wp_parse_args($args, array('html' => false, 'callback' => null));
$this->html = (bool) $args['html'];
if (null !== $args['callback'] and is_callable($args['callback'])) {
$this->callback = $args['callback'];
} elseif ($this->html) {
$this->callback = array($this, 'replace_tags_callback_html');
} else {
$this->callback = array($this, 'replace_tags_callback');
}
$this->content = $content;
}
public function get_replaced_tags()
{
return $this->replaced_tags;
}
public function replace_tags()
{
$regex = '/(\\[?)\\[[\\t ]*' . '([a-zA-Z_][0-9a-zA-Z:._-]*)' . '((?:[\\t ]+"[^"]*"|[\\t ]+\'[^\']*\')*)' . '[\\t ]*\\](\\]?)/';
return preg_replace_callback($regex, $this->callback, $this->content);
}
private function replace_tags_callback_html($matches)
{
return $this->replace_tags_callback($matches, true);
}
private function replace_tags_callback($matches, $html = false)
{
if ($matches[1] == '[' and $matches[4] == ']') {
return substr($matches[0], 1, -1);
}
$tag = $matches[0];
$tagname = $matches[2];
$values = $matches[3];
$mail_tag = new WPCF7_MailTag($tag, $tagname, $values);
$field_name = $mail_tag->field_name();
$submission = WPCF7_Submission::get_instance();
$submitted = $submission ? $submission->get_posted_data($field_name) : null;
if ($mail_tag->get_option('do_not_heat')) {
$submitted = isset($_POST[$field_name]) ? wp_unslash($_POST[$field_name]) : '';
}
$replaced = $submitted;
if (null !== $replaced) {
if ($format = $mail_tag->get_option('format')) {
$replaced = $this->format($replaced, $format);
}
$replaced = wpcf7_flat_join($replaced);
if ($html) {
$replaced = esc_html($replaced);
$replaced = wptexturize($replaced);
}
}
if ($form_tag = $mail_tag->corresponding_form_tag()) {
$type = $form_tag->type;
$replaced = apply_filters("wpcf7_mail_tag_replaced_{$type}", $replaced, $submitted, $html, $mail_tag);
}
$replaced = apply_filters('wpcf7_mail_tag_replaced', $replaced, $submitted, $html, $mail_tag);
if (null !== $replaced) {
$replaced = trim($replaced);
$this->replaced_tags[$tag] = $replaced;
return $replaced;
}
$special = apply_filters('wpcf7_special_mail_tags', null, $mail_tag->tag_name(), $html, $mail_tag);
if (null !== $special) {
$this->replaced_tags[$tag] = $special;
return $special;
}
return $tag;
}
public function format($original, $format)
{
$original = (array) $original;
foreach ($original as $key => $value) {
if (preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/', $value)) {
$datetime = date_create($value, wp_timezone());
if (false !== $datetime) {
$original[$key] = wp_date($format, $datetime->getTimestamp());
}
}
}
return $original;
}
}
class WPCF7_MailTag
{
private $tag;
private $tagname = '';
private $name = '';
private $options = array();
private $values = array();
private $form_tag = null;
public function __construct($tag, $tagname, $values)
{
$this->tag = $tag;
$this->name = $this->tagname = $tagname;
$this->options = array('do_not_heat' => false, 'format' => '');
if (!empty($values)) {
preg_match_all('/"[^"]*"|\'[^\']*\'/', $values, $matches);
$this->values = wpcf7_strip_quote_deep($matches[0]);
}
if (preg_match('/^_raw_(.+)$/', $tagname, $matches)) {
$this->name = trim($matches[1]);
$this->options['do_not_heat'] = true;
}
if (preg_match('/^_format_(.+)$/', $tagname, $matches)) {
$this->name = trim($matches[1]);
$this->options['format'] = $this->values[0];
}
}
public function tag_name()
{
return $this->tagname;
}
public function field_name()
{
return strtr($this->name, '.', '_');
}
public function get_option($option)
{
return $this->options[$option];
}
public function values()
{
return $this->values;
}
public function corresponding_form_tag()
{
if ($this->form_tag instanceof WPCF7_FormTag) {
return $this->form_tag;
}
if ($submission = WPCF7_Submission::get_instance()) {
$contact_form = $submission->get_contact_form();
$tags = $contact_form->scan_form_tags(array('name' => $this->field_name(), 'feature' => '! zero-controls-container'));
if ($tags) {
$this->form_tag = $tags[0];
}
}
return $this->form_tag;
}
}