В чем я нуждаюсь для совместимого почтового заголовка

В моем предыдущем коде есть несоответствия параметров, которые были исправлены, и полный рабочий код представлен ниже.

Я сохранил вывод t-SNE прямо в очередь и получил его в основном потоке. Следующим шагом будет преобразование этого в пул потоков и подклассификацию.

import threading
import queue
from sklearn.manifold import TSNE
import os
import time

def write_tsne_op(opdata,fname,header):

    with open(fname, 'w') as outfile:
        outfile.write(header)
        for data_slice in opdata:
            np.savetxt(outfile, data_slice,delimiter=",")

def task1(ip_matrix,qmdlvalues,qmdlparam,plex,exag,qmdltime,qmdlhrfn,hderfname):
    string=""
    start=0
    end=0
    mdltiming=0
    start = time.time()
    tmpmdl1 = TSNE(perplexity=plex,early_exaggeration=exag, n_components=2,random_state=0,verbose=1)
    qmdlvalues.put(tmpmdl1.fit_transform(ip_matrix))    
    string = str(plex)+ "$" + str(exag)
    qmdlparam.put(string)
    qmdlhrfn.put(hderfname)
    end = time.time()
    mdltimig = end - start
    print(str(mdltiming)+"time")
    qmdltime.put(mdltiming)

def task2(ip_matrix,qmdlvalues,qmdlparam,plex,exag,qmdltime,qmdlhrfn,hderfname):
    string=""
    start=0
    end=0
    mdltiming=0
    start = time.time()    
    tmpmdl2 = TSNE(perplexity=plex,early_exaggeration=exag, n_components=2,random_state=0,verbose=1)    
    qmdlvalues.put(tmpmdl2.fit_transform(ip_matrix))
    string = str(plex)+ "$" + str(exag)
    qmdlparam.put(string)
    qmdlhrfn.put(hderfname)
    end = time.time()
    mdltimig = end - start
    qmdltime.put(mdltiming)

def task3(ip_matrix,qmdlvalues,qmdlparam,plex,exag,qmdltime,qmdlhrfn,hderfname):
    string=""
    start=0
    end=0
    mdltiming=0
    start = time.time()    
    tmpmdl3 = TSNE(perplexity=plex,early_exaggeration=exag, n_components=2,random_state=0,verbose=1)    
    qmdlvalues.put(tmpmdl3.fit_transform(ip_matrix))
    string = str(plex)+ "$" + str(exag)
    qmdlparam.put(string)
    qmdlhrfn.put(hderfname)
    end = time.time()
    mdltimig = end - start
    qmdltime.put(mdltiming)

def task4(ip_matrix,qmdlvalues,qmdlparam,plex,exag,qmdltime,qmdlhrfn,hderfname):
    string=""
    start=0
    end=0
    mdltiming=0
    start = time.time()    
    tmpmdl4 = TSNE(perplexity=plex,early_exaggeration=exag, n_components=2,random_state=0,verbose=1)    
    qmdlvalues.put(tmpmdl4.fit_transform(ip_matrix))
    string = str(plex)+ "$" + str(exag)
    qmdlparam.put(string)
    qmdlhrfn.put(hderfname)
    end = time.time()
    mdltimig = end - start
    qmdltime.put(mdltiming)

if __name__ == "__main__": 

    # print ID of current process 
    print("ID of process running main program: {}".format(os.getpid())) 

    # print name of main thread 
    print("Main thread name: {}".format(threading.main_thread().name)) 

    dense_mx2 = dense_mx
    dense_mx3 = dense_mx
    dense_mx4 = dense_mx

    qmdlvl = queue.Queue()
    qmdlch = queue.Queue()
    qmdltme = queue.Queue()
    qmdlhdrfname = queue.Queue()

    perplex = 200

    # creating threads 
    exag=10
    t1 = threading.Thread(target=task1,args=(dense_mx,qmdlvl,qmdlch,perplex,exag,qmdltme,qmdlhdrfname,"#perplex: 200 early exag: 10 timing:

В моем предыдущем коде есть несоответствия параметров, которые были исправлены, и полный рабочий код представлен ниже.

Я сохранил вывод t-SNE прямо в очередь и получил его в основном потоке. Следующим шагом будет преобразование этого в пул потоков и подклассификацию.

[110]plex200_exag10.csv"), name='t1') exag=30 t2 = threading.Thread(target=task2,args=(dense_mx2,qmdlvl,qmdlch,perplex,exag,qmdltme,qmdlhdrfname,"#perplex: 200 early exag: 30 timing:

В моем предыдущем коде есть несоответствия параметров, которые были исправлены, и полный рабочий код представлен ниже.

Я сохранил вывод t-SNE прямо в очередь и получил его в основном потоке. Следующим шагом будет преобразование этого в пул потоков и подклассификацию.

[110]plex200_exag30.cv"), name='t2') exag=50 t3 = threading.Thread(target=task3,args=(dense_mx3,qmdlvl,qmdlch,perplex,exag,qmdltme,qmdlhdrfname,"#perplex: 200 early exag: 50 timing:

В моем предыдущем коде есть несоответствия параметров, которые были исправлены, и полный рабочий код представлен ниже.

Я сохранил вывод t-SNE прямо в очередь и получил его в основном потоке. Следующим шагом будет преобразование этого в пул потоков и подклассификацию.

[110]plex200_exag50.csv"), name='t3') exag=100 t4 = threading.Thread(target=task4,args=(dense_mx4,qmdlvl,qmdlch,perplex,exag,qmdltme,qmdlhdrfname,"#perplex: 200 early exag: 100 timing:

В моем предыдущем коде есть несоответствия параметров, которые были исправлены, и полный рабочий код представлен ниже.

Я сохранил вывод t-SNE прямо в очередь и получил его в основном потоке. Следующим шагом будет преобразование этого в пул потоков и подклассификацию.

[110]plex200_exag100.cv"), name='t4') # starting threads t1.start() t2.start() t3.start() t4.start() # wait until all threads finish t1.join() t2.join() t3.join() t4.join() while True: if qmdlvl.empty(): print("Queue closed. Exiting thread.") break try: item1 = qmdlvl.get(timeout=.5) item2 = qmdlch.get(timeout=.5) item3 = qmdltme.get(timeout=.5) header,fname = qmdlhdrfname.get(timeout=.5).split(') except: continue write_tsne_op(item1,fname,header)
10
задан Jack B Nimble 2 October 2008 в 06:00
поделиться

9 ответов

Кроме того, к предложениям Ted Percival, Вы могли попытаться использовать PHPMailer для создания электронных писем для Вас вместо того, чтобы вручную создать заголовки. Я использовал этот класс экстенсивно и не испытал любые затруднения из-за электронной почты, отклоняемой как спам Yahoo или кем-либо еще.

2
ответ дан 3 December 2019 в 18:37
поделиться
  • Не используйте HTML в своем электронном письме.
  • Отправьте его через законный почтовый сервер со статическим IP и обратным DNS (PTR), который указывает на реальное имя хоста машины (и соответствует вперед поиск).
  • Включайте Идентификатор сообщения (или удостоверьтесь, что локальная почтовая программа добавляет один для Вас).
  • Выполните свою электронную почту через SpamAssassin и посмотрите, какой плохой выигрыш постановляет, что соответствует. Постарайтесь не соответствовать им.
  • Используйте DomainKeys Определенная Почта для снабжения цифровой подписью сообщений.
10
ответ дан 3 December 2019 в 18:37
поделиться

Я просто успешно попробовал следование из моей учетной записи Веб-хостинга Yahoo!:

$email = "me@site.com";
$subject = "Simple test";
$body = "Simple test";
$header = "From: site \r\n";
$header .= "To: $name \r\n";
$header .= "Subject: $subject\r\n";
$header .= "Reply-To: site " . "\r\n";
$header .= "MIME-VERSION: 1.0\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$phpversion = phpversion();
$header .= "X-Mailer: PHP v$phpversion\r\n";
mail($email,$subject,$body,$header);

Однако у Вас есть некоторое дублирование в Вашем заголовке, необходимо только должны быть сделать следующее:

$email = "me@site.com";
$subject = "Simple test";
$body = "Simple test";
$header = "From: site \r\n";
$header .= "MIME-VERSION: 1.0\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$phpversion = phpversion();
$header .= "X-Mailer: PHP v$phpversion\r\n";
mail($email,$subject,$body,$header);
4
ответ дан 3 December 2019 в 18:37
поделиться

Предложения Ted's хороши, как Tim, но единственный способ, которым я когда-либо мог надежно получить электронную почту до Yahoo/Hotmail/и т.д., состоит в том, чтобы использовать ГРУШЕВЫЕ почтовые классы. Попробуйте их и (предположение, что Ваш сервер в порядке), я могу в значительной степени гарантировать, что он будет работать.

1
ответ дан 3 December 2019 в 18:37
поделиться

Проверьте rfc 822 и rfc 2045 для почтового формата. Я нахожу почтовый класс Python действительно легким работать с. Я предполагаю, что ГРУША php делает то же (согласно более ранним письмам). Также заголовок и тело разделяются "\r\n\r\n", не уверенным, если Ваш код автоматически вставляет это, но можно попытаться добавить это к заголовку.

Я не думаю, что DK/SPF мог бы быть необходимым (так как существует много веб-серверов там без поддержки DK/SPF). Может быть много факторов, которые могли бы заставлять это быть заблокированным (по крайней мере 10K различные критерии и методы.. p0f, greylisting, greylisting, помещая в черный список и т.д. и т.д.). Удостоверьтесь, что Ваша электронная почта правильно отформатирована (это имеет большое значение). Изучите библиотеки, которые генерируют полный заголовок для Вас.. тем путем у Вас есть наименьшее количество возможностей делания любой ошибки.

0
ответ дан 3 December 2019 в 18:37
поделиться

У Ted и Tim есть превосходные предложения. Как делает Shabbyrobe. Мы используем PHPMailer и не имеем никаких проблем со спам-фильтрами.

Одна вещь отметить состоит в том, что много спам-фильтров будут считать не наличие текстовой версии против Вас при использовании формата MIME. Вы могли добавить все заголовки и текстовую версию сами, или просто позволить PHPMailer, или ГРУШЕВАЯ почтовая библиотека заботятся об этом для Вас. Наличие текстовой версии может или не может помочь, но это - хорошая практика и удобный для пользователя.

Я понимаю, что Ваш пример кода просто, что - образец, но это стоит сказать: просто никогда не отбрасывайте пользователя, предоставленного данным в Ваши почтовые заголовки. Удостоверьтесь, что Вы проверяете это, это - данные, которые Вы ожидаете. Это тривиально для превращения php почтового сценария в открытое реле, и никто не хочет это.

1
ответ дан 3 December 2019 в 18:37
поделиться

Кроме того, к предложениям Ted Percival, удостоверьтесь, что IP-адрес, из которого прибывает электронная почта, является законным источником для электронной почты согласно записи SPF site.com. Если site.com не имеет записи SPF, добавляя одну (который позволяет рассматриваемый IP-адрес, конечно) может помочь получить электронные письма прошлые спам-фильтры.

И если абсолютно должны использовать HTML в Вашем электронном письме, удостоверьтесь, что Вы также включаете версию простого текста также; Вы использовали бы тип контента "многослойных/альтернативных" вместо "текста/HTML".

1
ответ дан 3 December 2019 в 18:37
поделиться

Добавить запись SPF очень просто. Вам стоит попробовать.

Это для Dreamhost и googlemail Вы также должны указать свой IP-адрес веб-сервера (в моем случае это строка перед googlemail) Последняя строка говорит серверу выполнить мягкое отклонение (пометить как спам, но не удалять). Я использую его вместо "-" (удалить), потому что в документации Google сказано: -)

Это запись TXT v = spf1 ip4: 64.111.100.0/24 ip4: 66.33.201.0/24 ip4: 66.33.216.0/24 ip4: 208.97.132.0/24 ip4: 208.97.187.0/24 ip4: 208.113.200.0/24 ip4: 208.113.244.0/24 ip4: 208.97.132.74 ip4: 67.205.36.71 включают: aspmx.googlemail.com mx ~ all

Надеюсь, это поможет

0
ответ дан 3 December 2019 в 18:37
поделиться

Также существует вероятность, что sendmail (который находится под функцией PHP mail ()) потребуются дополнительные параметры. Если у вас есть проблема с возвращаемыми заголовками (такими как Return-Path), которые не заданы так, как вы их задали, вам может потребоваться использовать пятый параметр mail (). Пример:

mail('recipient@domain.com', 'Subject', $mail_body, $headers, " -f sender@domain.com");

Есть еще одно свидетельство того, что настоящий ванильный sendmail может иметь проблемы с этим! Надеюсь, у вас есть postfix в качестве базовой поддержки mail () PHP на вашем целевом сервере.

2
ответ дан 3 December 2019 в 18:37
поделиться
Другие вопросы по тегам:

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