Для тех, кто находит это в будущем, я бы не рекомендовал использовать mail
. Есть несколько ответов, которые касаются этого, но не из-за этого.
Функция PHP mail
не только непрозрачна, но и полностью зависит от того, какой MTA вы используете (то есть Sendmail) для выполнения этой работы. mail
будет ТОЛЬКО сообщать вам, не удалось ли MTA принять его (т. е. Sendmail был отключен, когда вы пытались отправить). Он не может сказать вам, была ли почта успешной, потому что она была передана. Как таковой (как детали ответов Джона Конде), вы теперь можете возиться с журналами MTA и надеяться, что он расскажет вам об отсутствии возможности исправить его. Если вы находитесь на общем хосте или не имеете доступа к журналам MTA, вам не повезло. К сожалению, по умолчанию для большинства ванильных инсталляций для Linux обрабатывается так.
Почтовая библиотека ( PHPMailer , Zend Framework 2+ и т. д.) делает что-то очень отличное от mail
. То, что они делают, это открыть сокет непосредственно на принимающем почтовом сервере, а затем отправить SMTP-почтовые команды непосредственно через этот сокет. Другими словами, класс действует как собственный MTA (обратите внимание, что вы можете сказать библиотекам использовать mail
, чтобы в конечном итоге отправить почту, но я настоятельно рекомендую вам не делать этого).
Что это означает, что вы можете непосредственно видеть ответы с принимающего сервера (например, в PHPMailer вы можете включить вывод отладки ). Больше не гадать, если почта не была отправлена или почему.
Если вы используете SMTP (то есть вы вызываете
isSMTP()
), вы можете получить подробную расшифровку протокола SMTP, используя свойствоSMTPDebug
.Установите этот параметр, включив в свой скрипт такую строку:
$mail->SMTPDebug = 2;
Вы также получаете преимущество лучшего интерфейса. С помощью
Вы можете использовать переменную в теге статического шаблона. Обратите внимание, что вам не нужны {{
или }}
{% static SampleModel.0.propertyValue %}
Вы можете использовать любую переменную из своего контекста в тегах Django (для работы с пользовательскими тегами могут потребоваться некоторые корректировки). В вашем случае это прекрасно работает:
{% static SampleModel.0.propertyValue %}
Эти действия также работают:
{% with my_computed_var=SampleModel.0.propertyValue %}
{% static my_computed_var %}
{% endwith %}
{% static some_var|customFilter %}
Для получения дополнительной информации см. документацию об пользовательских тегах это также актуально для тегов по умолчанию Django.
add
:{% static "images"|add:SampleModel.0.propertyValue|add:".png" %}
. – Alasdair 4 January 2018 в 19:45