Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Послать письмо с помощью Microsoft Office Outlook (http://forum.oszone.net/showthread.php?t=157348)

SvetlanaK 17-11-2009 11:34 1272445

Послать письмо с помощью Microsoft Office Outlook
 
Подскажите, пожалуйста, как создать почтовое сообщение (без вложений) при помощи программы Microsoft Office Outlook.
Задача стоит такая - в конце месяца разослать участникам проекта сообщения с напоминанием заполнить необходимые документы.
Спасибо.

timsky 17-11-2009 16:35 1272691

А почему напрямую слать нельзя?

beve 17-11-2009 16:47 1272714

Посмотри, сдесь есть пример. Также сдесь есть библиотека для работы с программой OutlookExpress. (Может лучше через эту программу отослать). И еще, сдесь есть обсуждение и пример, как напрямую отослать email. Ну и напоследок, еще можно отослать email с помощью функции _INetMail(), описание которой есть в справке (Ета функция отправляет email из почтовой програмы, что по умолчанию).

SvetlanaK 17-11-2009 17:22 1272748

да вроде _INetMail() работает, но сообщения на русском приходят в виде

ïÞÅÎØ âù-ÙÓÔÒÁÑ ÂÕÒÁÑ ÌÉÓÁ ÐÒÙÇÁÅÔ ÞÅÒÅÚ ÐÏÄßÑÞÅÇÏ îéëïîá á ×ÏÔ ÉÓÈÏÄÎÉË

это уже вопрос 2:(

beve 17-11-2009 17:54 1272781

Попробуйте лучще напрямую отправить:
Код:

#Include<file.au3>


;------------------обязательные поля для заполнения-------------------------
$SmtpServer = "smtp.mail.ru" ; адресс smtp сервера (тут для mail.ru)
$Username = "Test@list.ru" ; ; название твоего почтового ящика (username for the account used from where the mail gets sent - REQUIRED)
$Password = "Test" ;Пароль к твоей почте (password for the account used from where the mail gets sent - REQUIRED)

$FromName = "Test@list.ru" ; Твое имя (имя отправителя))
$FromAddress = "Test@list.ru" ; название твоего почтового ящика
$ToAddress = "kontakt@list.ru" ; Почта того кому шлется письмо
$Subject = "Привет" ; тема сообщения
$Body = "Здравствуйте, как жизнь!" ; Текст сообщения
;---------------------------------------------------------------------------------------


$AttachFiles = "" ; файлы которые нужно присоединить к письму) the file you want to attach- leave blank if not needed(можно оставить так как есть)
$CcAddress = "" ; address for cc - leave blank if not needed
$BccAddress = "" ; address for bcc - leave blank if not needed
$Importance = "High" ; Send message priority: "High", "Normal", "Low"

$IPPort = 25 ; port used for sending the mail
$ssl = 0 ; enables/disables secure socket layer sending - put to 1 if using httpS
;~ $IPPort=465 ; GMAIL port used for sending the mail
;~ $ssl=1 ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS

;##################################
; Script
;##################################
Global $oMyRet[2]
Global $oMyError =
ObjEvent("AutoIt.Error", "MyErrFunc")
$rc =
_INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
If @error Then
MsgBox(0, "Error sending message", "Error code:" & @error & " Description:" & $rc)
EndIf
;
; The UDF
Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Importance="Normal", $s_Username = "", $s_Password = "", $IPPort = 25, $ssl = 0)
Local $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($as_Body, "<") And StringInStr($as_Body, ">") Then
$objEmail.HTMLBody = $as_Body
Else
$objEmail.Textbody = $as_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])
ConsoleWrite('@@ Debug(62) : $S_Files2Attach = ' & $S_Files2Attach & @LF & '>Error code: ' & @error & @LF) ;### Debug Console
If FileExists($S_Files2Attach[$x]) Then
$objEmail.AddAttachment ($S_Files2Attach[$x])
Else
ConsoleWrite('!> File not found to attach: ' & $S_Files2Attach[$x] & @LF)
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
If Number($IPPort) = 0 then $IPPort = 25
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
;Authenticated SMTP
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
;Update settings
$objEmail.Configuration.Fields.Update
; Set Email Importance
Switch $s_Importance
Case "High"
$objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "High"
Case "Normal"
$objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Normal"
Case "Low"
$objEmail.Fields.Item ("urn:schemas:mailheader:Importance") = "Low"
EndSwitch
$objEmail.Fields.Item ("urn:schemas:mailheader:content-type") = "text/plain; charset=UTF-8"
$objEmail.Fields.Update
; Sent the Message
$objEmail.Send
If @error Then
SetError(2)
Return $oMyRet[1]
EndIf
$objEmail=""
EndFunc
;==>_INetSmtpMailCom
;
;
; Com Error Handler
Func MyErrFunc()
$HexNumber = Hex($oMyError.number, 8)
$oMyRet[0] = $HexNumber
$oMyRet
[1] = StringStripWS($oMyError.description, 3)
ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF)
SetError(1)
; something to check for when this function returns
Return
EndFunc
;==>MyErrFunc


SvetlanaK 18-11-2009 13:05 1273410

спасибо за скрипт. но что-то у меня не склеилось - он не работает.
мне все же не аттач нужен а именно Body.
а _INetSmtpMail работает, но выдает неверную кодировку(
нет ли в АИ способа указать кодировку как WSH при помощи SetShar?

$s_Body = "тест"
$Response = _INetSmtpMail ($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $s_Body, $s_helo, $s_first, $s_trace)

автоит видимо выдает что-то по умолчанию , но не кириллцу.
в заголовках письма вот такая строка
Content-Type: text/plain; charset=US-ASCII

beve 18-11-2009 18:40 1273761

Цитата:

Цитата SvetlanaK
_INetSmtpMail работает, но выдает неверную кодировку »

Я специально попробовал отослать вот такое "письмо":
читать дальше »
Код:

#include <INet.au3>

$s_SmtpServer = "smtp.mail.ru"
$s_FromName = "User"
$s_FromAddress = "Test@list.ru"
$s_ToAddress = "user@list.ru"
$s_Subject = "Test"
Global $as_Body[1]
 
$as_Body[0]='Введение в AutoIt.AutoIt v3 - это язык для написания сценариев, напоминающий BASIC. Основным его назначением является автоматизация работ с Windows GUI (графическим интерфейсом пользователя MS Windows). Для выполнения этой сложной задачи предоставляется комбинация испытанных методов, включающих в себя - симуляцию нажатий комбинаций клавиш клавиатуры, перемещения указателя мыши и управления окнами и его визуальными элементами. Как показывает практика, эти "приводные ремни" весьма эффективны для получения работающих решений в ситуациях, когда другие стандартные средства (например, VBScript и SendKeys) оказываются бессильны. По замыслу AutoIt предполагался быть средством "тиражирования конфигураций" ПК. Но с момента создания третьей версии его возможности могут быть использованы для реализации "кухни" автоматизации - написания сценариев решения различных задач, в том числе и для администрирования системы. AutoIt умеет:'&@CRLF& 'Симулировать нажатия комбинаций клавиатуры (поддерживается основная масса раскладок клавиатуры)'&@CRLf&'Симулировать перемещения указателя мыши и нажатия на ее кнопки'&@CRLF&'Перемещать, менять размер и управлять параметрами отображения окон'&@CRLF&'Непосредственно взаимодействовать с "управляющими элементами" (controls) окна (получать/менять надпись, перемещать, отключать, и т.п. действия)'&@CRLF&'Работать с буфером обмена для пересылки его текстового содержания'&@CRLF&'Читать, менять и создавать ключи и значения реестра'
$Response =
_INetSmtpMail ($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body)
$err = @error
If $Response = 1 Then
   
MsgBox(0, "Success!", "Mail sent")
Else
   
MsgBox(0, "Error!", "Mail failed with error code " & $err)
EndIf



Отсылал 2 раза и открывал двумя разными почтовыми программами: The Bat и Pop Peeper, в обоих случаях письмо получено читабельно и в кирилице. (Тему и имя пользователя нужно писать в транслите либо на англ...)

SvetlanaK 19-11-2009 12:15 1274440

В том то и дело, что все почтовые программы кроме Outlook-а присылают письма через скрипт АИ на русском.
Ну что ж, альтернатива WSH, видимо дело в самом Outlook.
В любом случае спасибо огромное за скрипты и советы.


Время: 04:51.

Время: 04:51.
© OSzone.net 2001-