PDA

Показать полную графическую версию : [решено] Отправка почты с вложением


Страниц : [1] 2

foma24
05-07-2013, 12:20
Добрый день. Есть the Bat v.3 и есть папка C:\otpravka\ в которую периодически кидаются файлы с расширениями *.014 и *.015. Нужен скрипт, который бы каждый файл из папки отправлял отдельным письмом. Почта отправителя otpravitel@mail1.mail2.ru

Файлы с расширением *.014 необходимо отправлять на poluchatel1@mail1.mail2.ru. Файлы с расширением *.015 необходимо отправлять на poluchatel2@mail1.mail2.ru

Тема всех писем одинаковая - INFO

sunnykey
05-07-2013, 15:13
#Powershell script.
#Don't forget unlock script executing by
#using command "Set-ExecutionPolicy RemoteSigned" or "Set-ExecutionPolicy Unrestricted"
#Save this file with ".ps1" extension

function SendMailToUser($To,$FileMask) {
$From="otpravitel@mail1.mail2.ru"
$Subject="INFO"
$Body="This is test message"
$Password="password"
$SecPassword=New-Object -TypeName System.Security.SecureString
$Password.ToCharArray() | foreach {$SecPassword.AppendChar($_)}
$Credintial=New-Object -TypeName System.Management.Automation.PSCredential `
-ArgumentList $From,$SecPassword
$smtpServer="smtp.mail1.mail2.ru"
Get-ChildItem "C:\otpravka\*" -Include $FileMask -Recurse | `
Where-Object {$_.Attributes -ne [System.IO.FileAttributes]::Directory} | `
foreach {$_.FullName} | `
Send-MailMessage -From $From -To $To -Subject $Subject `
-Body $Body -Credential $Credintial -SmtpServer $smtpServer
}

SendMailToUser -To "poluchatel1@mail1.mail2.ru" -FileMask "*.014"
SendMailToUser -To "poluchatel2@mail1.mail2.ru" -FileMask "*.015"

foma24
05-07-2013, 16:00
sunnykey, большое спасибо, протестировать получится только в понедельник, вопрос - будут ли письма отображаться в Отправленных в the Bat при отправке через этот скрипт

Iska
05-07-2013, 17:27
будут ли письма отображаться в Отправленных в the Bat при отправке через этот скрипт »
Разумеется, нет: Send-MailMessage (http://technet.microsoft.com/en-us/library/hh849925.aspx).

sunnykey
06-07-2013, 09:25
sunnykey, большое спасибо, протестировать получится только в понедельник, вопрос - будут ли письма отображаться в Отправленных в the Bat при отправке через этот скрипт »
Я знаю, что thunderbird есть CLI. Ссылку прилагаю Thunderbird CLI (http://kb.mozillazine.org/Command_line_arguments_(Thunderbird))

foma24
06-07-2013, 10:22
Вот команда для отправки письма

thebat.exe /MAILU=otpravitel;TO= poluchatel1@mail1.mail2.ru;S=INFO;A=C:\otpravka\*.014;SEND

, но как ее заставить отправлять в одном письме только один файл, названия файлов различные, т.е. допустим в папке C:\otpravka\ три файла 111.014, 222.014, 333.014 каждый файл нужно отправить отдельным письмом

zion87
06-07-2013, 11:35
Попробуйте так

Set put=C:\otpravka
For /f "Delims=" %%i In ('Dir /b "%put%\*.014"') Do (
thebat.exe /MAILU=otpravitel;TO=poluchatel1@mail1.mail2.ru;S=INFO;A="%put%\%%i";SEND
)

sunnykey
06-07-2013, 14:10
Цитата zion87:
Попробуйте так
Код:
Set put=C:\otpravka
For /f "Delims=" %%i In ('Dir /b "%put%\*.014"') Do (
thebat.exe /MAILU=otpravitel;TO=poluchatel1@mail1.mail2.ru;S=INFO;A="%put%\%%i";SEND
) »
Думаю правильнее будет перечислить вложения через запятую, а то вдруг этих файлов тьма и столько же исходящих будет
#Powershell script.
#Don't forget unlock script executing by
#using command "Set-ExecutionPolicy RemoteSigned" or "Set-ExecutionPolicy Unrestricted"
#Save this file with ".ps1" extension

$TheBatCmd="/MAILU=otpravitel;TO= poluchatel1@mail1.mail2.ru;S=INFO;A="
$FileList=gci "D:\Аудио какое-то\*" -Include "*.log"
foreach ($el in $FileList) {
$TheBatCmd+='"'+$el+'"'+","
}
$TheBatCmd=$TheBatCmd.TrimEnd(',')+";SEND"
Start-Process -FilePath "C:\Program Files\TheBat.exe" -ArgumentList $TheBatCmd `
-NoNewWindow

foma24
07-07-2013, 00:35
Думаю правильнее будет перечислить вложения через запятую »
Файлов от силы 10 штук в день.

Спасибо всем, проверю в понедельник, тогда отпишусь

Iska
07-07-2013, 03:35
sunnykey, foma24, как правило, важно не количество, а суммарный размер: у многих бесплатных публичных серверов есть ограничения на размер вложений (а у некоторых — и на их количество на письмо).

sunnykey
07-07-2013, 04:31
sunnykey, foma24, как правило, важно не количество, а суммарный размер: у многих бесплатных публичных серверов есть ограничения на размер вложений (а у некоторых — и на их количество на письмо). »
Я исходил из того, что файлы малого размера (не более 100 КиБ) и их много, поэтому лучше прикрепить их все в одно письмо, чем городить множество исходящих. А то ещё почтовый сервер заблокирует за спам=)

Iska
07-07-2013, 07:19
А то ещё почтовый сервер заблокирует за спам »
Запросто ;).

foma24
08-07-2013, 11:21
Всем спасибо, все работает как нужно.

foma24
11-07-2013, 12:21
Здравствуйте еще раз, пришлось поднять тему, возник новый вопрос. Использую этот скрипт:
Set put=C:\otpravka
For /f "Delims=" %%i In ('Dir /b "%put%\*.014"') Do (
thebat.exe /MAILU=otpravitel;TO=poluchatel1@mail1.mail2.ru;S=INFO;A="%put%\%%i";SEND
)
del /Q c:\otchet\*.014

проблема в том, что похоже пока письмо еще формируется скрипт успевает удалить файл, в итоге письмо уходит без вложенного файла, как можно исправить таую ситуацию ?

Iska
11-07-2013, 13:41
foma24, а ежели попробовать исполнять «thebat.exe» посредством «start /wait»?

sunnykey
11-07-2013, 14:45
проблема в том, что похоже пока письмо еще формируется скрипт успевает удалить файл, в итоге письмо уходит без вложенного файла, как можно исправить таую ситуацию ? »
Есть такая функция как

C:\>timeout /?

TIMEOUT [/T] <таймаут> [/NOBREAK]

Описание:
Принимает значение таймаута, задающего фиксированный период времени
ожидания (в секундах), или ожидание до нажатия клавиши. Имеется также
параметр, зaдающий игнорирование нажатий клавиш.

Параметры:
/T <таймаут> Время ожидания в секундах.
Допустимый интервал: от -1 до 99999 секунд.

/NOBREAK Игнорировать нажатия клавиш, ждать указанное время.

/? Вывод справки по использованию.

Примечание: значение таймаута, равное -1 задает неограниченное время
ожидания до нажатия клавиши.

Примеры:
TIMEOUT /?
TIMEOUT /T 10
TIMEOUT /T 300 /NOBREAK
TIMEOUT /T -1

foma24
11-07-2013, 15:16
спасибо, попробую

foma24
11-07-2013, 15:37
небольшая проблемка, почему то при вводе timeout /? появляется

"TIMEOUT" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

Хотя на другом компьютере все нормально, может что то с Path ?

sov44
11-07-2013, 15:57
Решил попробовать отправить почту посредством bat. Скопировал исполнительный файл в папку (библиотеки не копировал, не знаю, нужны ли?), почитал мануал http://www.nobat.ru/cmd_intro.html, но при запуске батника(код.866) thebat.exe /MAILU=почта@yandex.ru;TO=почта@gmail.com;S=proba;A="c:\2\файл.jpg";SEND выскакивает окно http://savepic.org/3987188.jpg. Подскажите, где ошибка?

foma24
11-07-2013, 16:14
а если в bat войти просто такого окна нет, такое ощущение что почтовый ящик просто не заведен ?




© OSzone.net 2001-2012