[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подскажите пожалуйста, что не так?
strij911
Добрый день!

При приёме на работу дали задание:

Разработчику была поставлена следующая задача: нужно уметь отправлять пользователям сообщения на электронную почту, при этом возможно некоторые сообщения могут отправляться в формате html.

Разработчик взял задание в работу и через какое-то время предоставил код, который по его мнению способен решить поставленную задачу:

<?php

abstract class
Message

{

public $to;

public $from;

public $subject;

public $template;

public $message;

abstract public function send();

public function getMessage()

{

return strtr($this->template, array('%message%' => $this->message));

}

}




class HtmlMessage extends Message

{

public $template = '<font size="12">%message%</font>';

public function send()

{

mail($this->to, $this->subject, $this->getMessage(), "From: {$this->from}");

}

}




?>


Ваша задача:

1. описать все недостатки данной архитектуры;

2. предложить новую архитектуру, которая позволит решить поставленную задачу.

Я написал вот такой класс:

<?PHP

class Message {
const TYPE_TEXT = 'text/plain';
const TYPE_HTML = 'text/html';
const TEMPLATE_REPLACEMENT = '%message%';

private $from;
private $to;
private $subject;
private $template;
private $messageText;
private $type = self::TYPE_TEXT; // По-умолчанию отправка в текстовом формате

/* Конструктор, принимающий e-mail адрес */

public function setTo($to) {
$this->to = $to;
}

/* Изменение обратного e-mail адреса */
public function setFrom($from) {
$this->from = $from;
}

/* Изменение темы письма */
public function setSubject($subject) {
$this->subject = $subject;
}

/* Изменение шаблона */
public function setTemplate($template) {
$this->template = $template;
}

/* Изменение текста письма */
public function setMessageText($text) {
$this->messageText = $text;
}

/* Изменение типа содержимого письма */
public function setMessageType($type) {
$this->type = $type;
}

/* Замена текста в шаблоне */
public function getMessageFromTemplate() {
return str_ireplace(self::TEMPLATE_REPLACEMENT, $this->messageText, $this->template);
}

/* Метод отправки письма */
public function send() {
if (empty($this->to)) throw new Exception('The field "TO" is undefined');
if (empty($this->from)) throw new Exception('The field "FROM" is undefined');
if (empty($this->template)) throw new Exception('Template is undefined');
if (empty($this->messageText)) throw new Exception('Message text is undefined');

$from = $this->from;
$to = $this->to;
$headers = "From: ".$this->from."\r\nReply-To: ".$this->from."\r\nContent-type: ".$this->type."; charset=utf-8\r\n"; // Устанавливаем необходимые заголовки письма
$subject = "=?utf-8?B?".base64_encode($this->subject)."?="; // Кодируем тему (во избежание проблем с кодировкой)
return mail($to, $subject, $this->getMessageFromTemplate(), $headers); // Отправляем письмо
}
}


/* Применение для отправки HTML*/

$mail = new Message();
$mail->setMessageType(Message::TYPE_HTML);
$mail->setTo('email@mail.ru');
$mail->setFrom('strij@yandex.ru');
$mail->setSubject('Test');
$mail->setTemplate('<font size="12">%message%</font>');
$mail->setMessageText('Привет!');

if ($mail->send()) echo 'Письмо отправлено!';
else echo 'Ошибка';


Сказали, что выполнено неудовлетворительно :(
Можете подсказать, что не так?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.