Что нового

Не отправляется сообщение на почту

SharkX58

Новичок
Сообщения
11
Репутация
0
Не приходят письма на почту. Должно сообщение приходить, после того как пользователь поставит галочки и нажмёт выполнить. Что я делаю не так?

Код:
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>


GUICreate("ТЕКСТ", 600, 300, -1, -1, BitOR($WS_MINIMIZEBOX,$WS_POPUP,$WS_GROUP), BitOR($WS_EX_TOPMOST,$WS_EX_WINDOWEDGE)) ; Создаёт окно в центре экрана

GUISetBkColor(0xffb8c2) ; устанавливает цвет фона
#GUISetBkColor(0xffe6cc) ; устанавливает цвет фона

GUISetFont(11, 400, 0); размер шрифта

Local $nCh1 = GUICtrlCreateCheckbox("ТЕКСТ", 40, 40, 700, 17)
Local $nCh2 = GUICtrlCreateCheckbox("ТЕКСТ", 40, 80, 400, 17)

GUISetFont(10, 400, 0)
GUICtrlCreateLabel("2.1 ТЕКСТ", 55, 105, 400, 17)
GUICtrlCreateLabel("2.2 ТЕКСТ;", 55, 130, 400, 17)
GUICtrlCreateLabel("2.3 ТЕКСТ", 55, 155, 400, 17)
GUICtrlCreateLabel("2.4 ТЕКСТ", 55, 180, 400, 17)
GUICtrlCreateLabel("2.5 ТЕКСТ", 55, 205, 400, 17)



#GUICtrlCreateLabel("* ТЕКСТ", 55, 460, 400, 17)
#GUICtrlSetBkColor(-1, 0x98c793); цвет текста
#GUICtrlSetBkColor(-1, 0x98c793); цвет текста


Local $close = GUICtrlCreateButton("Выполнено", 480, 250)

GUICtrlSetState($close, $GUI_DISABLE)
GUISetState() ; показывает созданное окно
Local $count = 0
While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case $nCh1, $nCh2
            If GUICtrlRead($msg) = 1 Then
                $count+=1
            Else
                $count-=1
            EndIf

            If $count = 2 Then
                GUICtrlSetState($close, $GUI_ENABLE)
            Else
                GUICtrlSetState($close, $GUI_DISABLE)
            EndIf
        Case $close
            If $count = 2 Then ExitLoop
    EndSwitch
	
	$str = "http://schemas.microsoft.com/cdo/configuration/"
$hMAIL = ObjCreate ("CDO.Message")
    With $hMAIL
        .From = "[email protected]"
        .To = "[email protected]"
        .Subject = "Test"
        .TextBody = "Test"
       ; .AddAttachment ("C:\boot.ini") ;файл для отправки
    EndWith
    With $hMAIL.Configuration.Fields
        .Item ($str & "sendusing") = 2
        .Item ($str & "smtpserver") = "smtp.inbox.ru" ;SMTP Server
        .Item ($str & "smtpauthenticate") = 1
        .Item ($str & "sendusername") = "[email protected]"
        .Item ($str & "sendpassword") = "pass" ;Пароль SMTP-сервер
        .Item ($str & "smtpserverport") = 465 ;Порт
        .Update
    EndWith
	
WEnd
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Объект создали, всего в него написали, а где отправили ?
Код:
$hMAIL.Send


Только, пожалуйста, не делайте отправку письма вот так:
Отправка письма в "бесконечном" цикле без пауз...
Код:
While 1
    $msg = GUIGetMsg()
    Switch $msg
		...
    EndSwitch
    
    $str = "http://schemas.microsoft.com/cdo/configuration/"
	$hMAIL = ObjCreate ("CDO.Message")
    With $hMAIL
        .From = "[email protected]"
		...
       ; .AddAttachment ("C:\boot.ini") ;файл для отправки
    EndWith
    With $hMAIL.Configuration.Fields
        .Item ($str & "sendusing") = 2
		...
        .Update
    EndWith
    $hMAIL.Send
WEnd

Хотя можно - разве что только узнать сколько писем придет за секунду + получить "spam block"
 
Автор
S

SharkX58

Новичок
Сообщения
11
Репутация
0
Я перенес WEnd сюда:

Код:
While 1
    $msg = GUIGetMsg()
    Switch $msg
        ...
    EndSwitch
WEnd


И добавил в конце:

Код:
$str = "http://schemas.microsoft.com/cdo/configuration/"
$hMAIL = ObjCreate ("CDO.Message")
....................
   .Update
    EndWith
$hMAIL.Send



Но письма не приходят. Я еще что то упустил?
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
SharkX58
У меня тоже не отправляет (есть старый/добрый скрипт)...

Ссылается на ошибку:
Код:
$hMAIL = ObjCreate ("CDO.Message")
    With $hMAIL
        .From = ****
        .To = ****


Код:
"*:\_AutoIT\_temp\001.au3"(73,4) : error: missing separator character before keyword.
		.To
		~^

В AutoIt 3.3.12.0:
О самой ошибке на сколько я понял известно - читать тут (с) www.autoitscript.com

Возможно в Beta уже исправили или исправят в ближайшем релизе
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
на бетке работает. проверил. а в 3.3.12.0 - глюк
последний раз комипилировал программу с этой функцией в 3.3.8.0.
программка работает. исходник, ясен перец, выдает ошибку
 
Автор
S

SharkX58

Новичок
Сообщения
11
Репутация
0
Обновился до бетки, но все равно не отправляет, ошибка на скриншоте.

Вы с помощью какого кода отправляли?
 

Вложения

  • ошибка1.jpg
    ошибка1.jpg
    16 КБ · Просмотры: 30
Автор
S

SharkX58

Новичок
Сообщения
11
Репутация
0
Помогите с отправкой почты. Так и не могу отправить никак((((

Код:
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>


GUICreate("Текст", 600, 300, -1, -1, BitOR($WS_MINIMIZEBOX,$WS_POPUP,$WS_GROUP), BitOR($WS_EX_TOPMOST,$WS_EX_WINDOWEDGE)) ; Создаёт окно в центре экрана

GUISetBkColor(0xffb8c2) ; устанавливает цвет фона


GUISetFont(11, 400, 0); размер шрифта

Local $nCh1 = GUICtrlCreateCheckbox("1. Текст", 40, 40, 700, 17)
Local $nCh2 = GUICtrlCreateCheckbox("2. Текст", 40, 80, 400, 17)

GUISetFont(10, 400, 0)

GUICtrlCreateLabel("2.1 Текст;", 55, 105, 600, 17)
GUICtrlCreateLabel("2.2 Текст;", 55, 130, 400, 17)
GUICtrlCreateLabel("2.3 Текст;", 55, 155, 400, 17)
GUICtrlCreateLabel("2.4 Текст;", 55, 180, 400, 17)

Local $nCh3 = GUICtrlCreateCheckbox("3. Текст:", 40, 220, 400, 17)



Local $close = GUICtrlCreateButton("Выполнено", 480, 250)

GUICtrlSetState($close, $GUI_DISABLE)
GUISetState() ; показывает созданное окно
Local $count = 0
While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case $nCh1, $nCh2, $nCh3
            If GUICtrlRead($msg) = 1 Then
                $count+=1
            Else
                $count-=1
            EndIf

            If $count = 3 Then
                GUICtrlSetState($close, $GUI_ENABLE)
            Else
                GUICtrlSetState($close, $GUI_DISABLE)
            EndIf
        Case $close
            If $count = 3 Then ExitLoop
    EndSwitch
	WEnd
	
	$str = "http://schemas.microsoft.com/cdo/configuration/"
$hMAIL = ObjCreate ("CDO.Message")
    With $hMAIL
        .From = "почта"
        .To = "почта"
        .Subject = "Текст"
        .TextBody = "Задачи выполнены"
       ; .AddAttachment ("C:\boot.ini") ;файл для отправки
    EndWith
    With $hMAIL.Configuration.Fields
        .Item ($str & "sendusing") = 2
        .Item ($str & "smtpserver") = "smtp.yandex.ru" ;SMTP Server
        .Item ($str & "smtpauthenticate") = 1
        .Item ($str & "sendusername") = "почта"
        .Item ($str & "sendpassword") = "пароль" ;Пароль SMTP-сервер
        .Item ($str & "smtpserverport") = 465 ;Порт
        .Update
    EndWith
$hMAIL.Send
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
SharkX58
Яндекс использует защищённое соединение
Код:
...
        .Item ($str & "smtpserverport") = 465
        .Item ($str & "smtpusessl") = 1 ; <= добавить
        .Update
...
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
не знаю как, но работает :smile:
autoit 3.3.12.0
Код:
#AutoIt3Wrapper_Run_AU3Check= N
#include <File.au3>
$SmtpServer = 'smtp.yandex.ru'
$FromAddress = 'логин@yandex.ru'
$Username = 'логин'
$Password = 'пароль'
$ToAddress = 'адресат@inbox.ru'
$Subject = 'тема письма'
$Body = 'содержание письма'
_INetSmtpMailCom($SmtpServer, '', $FromAddress, $ToAddress, $Subject, $Body, '', '', '', $Username, $Password)
Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $s_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 1)
	$objEmail = ObjCreate("CDO.Message")
	$objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
	$objEmail.To = $s_ToAddress
	Local $i_Error = 0
	Local $i_Error_desciption = ""
	If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
	If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
	$objEmail.Subject = $s_Subject
	If StringInStr($s_Body, "<") And StringInStr($s_Body, ">") Then
		$objEmail.HTMLBody = $s_Body
	Else
		$objEmail.Textbody = $s_Body & @CRLF
	EndIf
	If $s_AttachFiles <> "" Then
		Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
		For $x = 1 To $S_Files2Attach[0]
			$S_Files2Attach[$x] = _PathFull($S_Files2Attach[$x])
			If FileExists($S_Files2Attach[$x]) Then
				$objEmail.AddAttachment($S_Files2Attach[$x])
			Else
				$i_Error_desciption = $i_Error_desciption & @LF & 'File not found to attach: ' & $S_Files2Attach[$x]
				SetError(1)
				Return 0
			EndIf
		Next
	EndIf
	$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
	$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
	$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
	If $s_Username <> "" Then
		$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
		$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
		$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
	EndIf
	If $ssl Then
		$objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
	EndIf
	$objEmail.Configuration.Fields.Update
	$objEmail.Send
	If @error Then
		SetError(2)
	EndIf
EndFunc   ;==>_INetSmtpMailCom
 

urrya

Новичок
Сообщения
159
Репутация
1
Пример хороший, но где отправка файлов?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
urrya
где отправка файлов
Судя по коду функции за файлы отвечает седьмой параметр $s_AttachFiles. Передаётся строка с путями к файлам, разделёнными точкой с запятой.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
да, седьмой параметр. только что проверил - все письма с файлами доставляет адресату.
 

urrya

Новичок
Сообщения
159
Репутация
1
Что то вообще не отправляет ничего, даже просто текст :shok:
Но ошибку не выдаёт ;)


Добавлено:
Сообщение автоматически объединено:

Протестировал. Итог:
С главного компьютера отправляет только текст.
С машин из "Домашней сети" не отправляет ничего.
добавил -
Код:
$SmtpServer = 'smtp.yandex.ru'
$FromAddress = 'логин@yandex.ru'
$Username = 'логин'
$Password = 'пароль'
$ToAddress = 'адресат@inbox.ru'
$Subject = 'тема письма'
$Body = 'содержание письма'
$s_AttachFiles = (@ScriptDir & "\test.rar")


файл не отправляется.



Добавлено:
Сообщение автоматически объединено:

На главном компьютере отправка файлов заработала -
Код:
$Body = 'содержание письма'
$eFiles = (@ScriptDir & "\test.rar")

_INetSmtpMailCom($SmtpServer, '', $FromAddress, $ToAddress, $Subject, $Body, $eFiles, '', '', $Username, $Password)
 

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
не знаю как, но работает
А как с гугла отправить? У меня ругается на безопасность. На почту приходит сообщение, что типа была попытка войти в аккаунт с ненадежного приложения и потому заблокирован такой вход. Ну а в консоли ошибка на строке $objEmail.Send
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Отправляю вот так:
Код:
$str = "http://schemas.microsoft.com/cdo/configuration/"
$hMAIL = ObjCreate ("CDO.Message")
    With $hMAIL
        .From = "*********@gmail.com";
        .To = "**********"
        .Subject = "Test"
        .TextBody = "Test mail"
       .AddAttachment ("")  ;файл для отправки
    EndWith
    With $hMAIL.Configuration.Fields
        .Item ($str & "sendusing") = 2
        .Item ($str & "smtpserver") = "smtp.gmail.com" ;SMTP Server
        .Item ($str & "smtpusessl") = True
        .Item ($str & "smtpauthenticate") = 1
        .Item ($str & "sendusername") = "**********"
        .Item ($str & "sendpassword") = "***********" ;Пароль SMTP-сервер
        .Item ($str & "smtpserverport") = 465        ;Порт
        .Update
    EndWith
$hMAIL.Send

Только нужно в настройках самой почты разрешить небезопасные приложения:
Безымянный.jpg
 

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Только нужно в настройках самой почты разрешить небезопасные приложения:
Не могу такое найти. Только вот. И пробовал включать POP/IMAP и либо не так настраиваю, либо это не нужно, не то...
И уже ни одним способом отправки не получаю сообщение о попытке входа

Хотя как-то нашел этот переключатель. Стоит сейчас в таком же положении "разрешено". Даже письмо на почту пришло, типа подтвердить разрешение, но все равно не отправляет
Сообщение автоматически объединено:

Пароль SMTP-сервер
Может я не правильно понимаю, что такое "Пароль SMTP-сервер" ? Это пароль моей почты?
 

Вложения

  • Скриншот 05-12-2020 19.12.59.jpg
    Скриншот 05-12-2020 19.12.59.jpg
    71.9 КБ · Просмотры: 5
  • Скриншот 05-12-2020 19.17.11.jpg
    Скриншот 05-12-2020 19.17.11.jpg
    220.4 КБ · Просмотры: 5
Последнее редактирование:

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Это пароль моей почты?
Да
либо не так настраиваю, либо это не нужно
Там и искать особо не нужно - открываете письмо, в котором говорит Вам Гугл о попытке подключении к Вашей учётной записи и там прямо в письме нажимаете "Да" и дальше есть ссылка на изменение настроек безопасности, перейдя по ссылке - попадаете на окно, что я в скриншоте показывал.
Или "Управление аккаунтом Google" - "Безопасность" - "Ненадежные приложения у которых есть доступ к аккаунту" - "Небезопасные приложения разрешены"
 
Последнее редактирование:

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Проверил у себя , только этой настройки не хватало для отправки. Могут быть проблемы если у Вас настроена двухэтапная аутентификация в почте.
 
Верх