PHPMailer v. почт () для простой Формы Контакта

Я думаю, что необходимо только выдать исключение, когда нет ничего, что можно сделать для выхода из текущего состояния. Например, если Вы выделяете память и нет никого для выделения. В случаях Вы упоминаете, что можете ясно восстановиться с тех состояний и можете возвратить код ошибки назад Вашей вызывающей стороне соответственно.

Вы будете видеть много совета, включая в ответах на этот вопрос, что необходимо выдать исключения только при "исключительных" обстоятельствах. Это кажется поверхностно разумным, но является испорченным советом, потому что он заменяет один вопрос ("когда я должен выдать исключение") с другим субъективным вопросом ("что, является исключительным"). Вместо этого последуйте совету Herb Sutter (для C++, доступного в статья Dr Dobbs, Когда и Как Использовать Исключения , и также в его книге с Andrei Alexandrescu, Стандарты Кодирования C++ ): выдайте исключение, если, и только если

  • предварительное условие не встречено (который обычно делает один из следующих невозможных) или
  • альтернативе не удалось бы встретить постусловие или
  • , альтернатива не поддержит инвариант.

, Почему это лучше? Разве это не заменяет вопрос несколько вопросы о предварительных условиях, постусловиях и инвариантах? Это лучше по нескольким связанным причинам.

  • Предварительные условия, постусловия и инварианты характеристики дизайна нашей программы (ее внутренний API), тогда как решение к throw является деталью реализации. Это вынуждает нас принять во внимание, что мы должны рассмотреть дизайн и его реализацию отдельно и наше задание, в то время как реализация метода должна произвести что-то, что удовлетворяет конструктивные ограничения.
  • Это вынуждает нас думать с точки зрения предварительных условий, постусловий и инвариантов, которые являются только предположения, что вызывающие стороны нашего метода должны сделать, и выражаются точно, включая слабую связь между компонентами нашей программы.
  • , Что слабая связь затем позволяет нам осуществлять рефакторинг реализацию при необходимости.
  • постусловия и инварианты являются тестируемыми; это приводит к коду, который может быть легко протестированной единицей, потому что постусловия являются предикатами, которые может проверить наш код модульного теста (утверждают).
  • Взгляды с точки зрения постусловий естественно производят дизайн, который имеет успех как постусловие , который является естественным стилем для использования исключений. Нормальный ("счастливый") путь выполнения Вашей программы размечается линейно со всем кодом обработки ошибок, перемещенным в эти catch пункты.

10
задан Jeff 12 August 2009 в 18:49
поделиться

4 ответа

Вот все, что я мог придумать за один присест, простите меня, если есть какие-то явные упущения.

Преимущества использования встроенной функции почты PHP, без внешней библиотеки / оболочки:

  • Вам ничего не нужно кроме PHP.
  • Вам не нужно изучать новый API.
  • Вам не нужно беспокоиться о PHP. обновление или подобное нарушение сценария.
  • Вам не нужно беспокоиться о обновленная версия не работает на вашем Установка PHP.
  • Вам не о чем беспокоиться потенциальные уязвимости безопасности как результат использования этого сценария.
  • Если это простая задача, все будет готово за несколько минут.

Преимущества использования внешней библиотеки / оболочки:

  • Если вам нужно ввести больше сложности в вашей электронной почте, вы сделать это довольно легко. Добавление вложения, встроенные изображения и т. д. не очень весело использовать обычную почту PHP функция. Внешние библиотеки (в по крайней мере хорошие) иметь больше ООПиш API. Добавить вложение можно так же просто, как $ message-> addAttachment ($ file); без необходимости экспериментировать с заголовками и т. Д.
  • Внешние библиотеки лучше скрывают уродливые сложности таких задач, как добавление вложений, персонаж кодировок и встроенных изображений.
  • Использование библиотеки сейчас сэкономит вам хлопот изучать это в будущее, когда вам понадобится дополнительная сложность / функциональность.
  • Внешние библиотеки возможно (я действительно не уверен, какие и в какой степени) адресовать определенные уязвимости, которые делает почта PHP нет.

Если я смогу придумать что-нибудь еще, я обязательно добавлю это.

15
ответ дан 3 December 2019 в 20:05
поделиться

Возможно, это не ответит на все ваши вопросы, но я думаю, это тоже не повредит ...

Что бы вы ни делали, Я бы не пошел с mail () : отправка почты - не такая уж простая задача, и использование существующей библиотеки / фреймворка всегда будет хорошей идеей: это решит многие проблемы, о которых вы, вероятно, даже не задумывались - даже если вам не нужно отправлять много писем.


Что касается ваших конкретных вопросов, возможно, в других ответах будет сказано что-то еще и / или вы получите дополнительную информацию, но любая "хорошая" библиотека, созданная для отправки писем, должна иметь дело с такими типами проблемы ... В противном случае вам, вероятно, следует поискать другую библиотеку ^^

Тем не менее, тестирование пары тупых неадресов позволит вам быть на 100% уверенным;-)


Еще одно решение, чтобы быть уверенным, - это проверить источник библиотеки; -)

В исходном коде версии 2.2.1 вы найдете такие вещи:

class.phpmailer.php , функция AddAnAddress , строка 413, вы увидите это:

if (!self::ValidateAddress($address)) {
  $this->SetError($this->Lang('invalid_address').': '. $address);
  if ($this->exceptions) {
    throw new phpmailerException($this->Lang('invalid_address').': '.$address);
  }
  echo $this->Lang('invalid_address').': '.$address;
  return false;
}

И похоже, что эта функция используется другими функциями, которые добавляют адрес ... Итак, я полагаю, что есть какой-то проверки email-адресов ;-)
Это ответит хотя бы на один из ваших вопросов ^^


PHPMailer - не единственное существующее решение, кстати; существует множество других, например:

2
ответ дан 3 December 2019 в 20:05
поделиться

Как упоминал Паскаль МАРТИН, отправить электронное письмо не так просто и просто, как некоторые люди думают. Чтобы ответить на ваши вопросы напрямую. Да, PHPMailer выполняет некоторую проверку, но она не супер-продвинутая, но ее должно хватить для ваших целей. А PHPMailer сэкономит вам время в зависимости от того, какие пользовательские функции вам понадобятся. Тем не менее, некоторые вещи, которые следует учитывать:

  • HTML против обычного текста. Если электронные письма будут приходить только вам, это, вероятно, не так уж и важно. Но если вы когда-либо отправляете электронные письма своим пользователям (например, письмо с подтверждением), вы хотите иметь возможность поддерживать как HTML, так и клиенты с обычным текстом. PHPMailer (и Zend_Mail) делают это очень легко.
  • SMTP. Это еще один вопрос, который действительно важен, если вы отправляете электронное письмо своим пользователям, но не настолько, если он » это просто электронное письмо самому себе. При использовании функции обычной почты php () электронное письмо будет отправлено через sendmail, который почти все установки * nix поставляются с готовой из коробки (особенно серверы). В результате спам-фильтры не очень дружелюбны по отношению к нему. Если у вас есть обычный SMTP-сервер с надежной записью MX (или если у вас есть учетная запись gmail), вы можете отправлять через нее с помощью SMTP, что поможет снизить вероятность того, что ваша почта будет помечена как спам.

В дополнение к Просто попробуйте PHPMailer Zend_Mail (это часть Zend Framework ). Однако для простой формы обратной связи этого может быть немного.

т очень дружелюбен к нему. Если у вас есть обычный SMTP-сервер с надежной записью MX (или если у вас есть учетная запись Gmail), вы можете отправлять через нее с помощью SMTP, что поможет снизить вероятность того, что ваша почта будет помечена как спам.

В дополнение к Просто попробуйте PHPMailer Zend_Mail (это часть Zend Framework ). Однако для простой контактной формы этого может быть немного.

т очень дружелюбен к нему. Если у вас есть обычный SMTP-сервер с надежной записью MX (или если у вас есть учетная запись gmail), вы можете отправлять через нее с помощью SMTP, что поможет снизить вероятность того, что ваша почта будет помечена как спам.

В дополнение к Просто попробуйте PHPMailer Zend_Mail (это часть Zend Framework ). Однако для простой контактной формы этого может быть немного.

2
ответ дан 3 December 2019 в 20:05
поделиться

Я выбрал PHPMailer, потому что он позволяет мне отправлять электронные письма SMTP в Google без установки каких-либо библиотек или настройки почтового сервера, так что мне не нужно беспокоиться о проблемах, связанных со спамом.

0
ответ дан 3 December 2019 в 20:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: