Этот является проблемой кода, а не проблемой сети.
Вы подключаетесь к порту 465, который обычно используется для неявного TLS (т. Е. Он ожидает немедленной передачи TLS), известного как SMTPS, но вы не сказали PHPMailer сделать это, поэтому он просто повесить, как вы видите. Исправьте это, установив этот режим TLS:
$mail->SMTPSecure = 'ssl';
from functools import partial
for name in iter(partial(raw_input, 'Name:'), ''):
do_something_with(name)
или если Вы хотите список:
>>> names = list(iter(partial(raw_input, 'Name: '), ''))
Name: nosklo
Name: Andreas
Name: Aaron
Name: Phil
Name:
>>> names
['nosklo', 'Andreas', 'Aaron', 'Phil']
Нет, извините. Это - FAQ, объясненный хорошо здесь:
Fredrik Lundh причиной того, что не было позволено присвоение в выражениях Python является общая, дефицитная ошибка на тех других языках.
Много альтернатив были предложены. Большинство - взломы, которые сохраняют некоторый ввод, но используют произвольный или загадочный синтаксис или ключевые слова, и приводят простой критерий к сбою предложений по изменению языка: это должно интуитивно предложить прямое значение читателю, который еще не был представлен конструкции.
интересное явление - то, что самые опытные Python программисты распознают
while True
, идиома и don’t, кажется, отсутствуют, присвоение в выражении создают много; it’s только вновь прибывшие, которые выражают сильное требование добавить это к языку.There’s альтернативный способ записать это, которое кажется привлекательным:
line = f.readline() while line: ... # do something with line... line = f.readline()
Можно перенестись raw_input()
для превращения его в генератор:
def wrapper(s):
while True:
result = raw_input(s)
if result = '': break
yield result
names = wrapper('Name:')
, что означает, что мы возвращаемся к начальной ситуации, но с более сложным кодом. Таким образом, если необходимо перенести существующий метод, необходимо использовать подход nosklo.