1 / 1 / 0
Регистрация: 22.01.2016
Сообщений: 29
1

Отправка файла по e-mail

15.02.2016, 09:49. Показов 7613. Ответов 14
Метки нет (Все метки)

Подскажите как решить задачу. Пытаюсь реализовать отправку файла (пример log.txt) на email. Перелопатил кучу тем на этом форуме, попробовал blat, но он уже не работает после обновлений на яндексе и mail.ru. Попробовал Cmail, тоже не работает. Мне бы подошел способ отправки на FTP, его я реализовал стандартными средствами windows. Но есть много машин с одинаковым файлом. И когда первая машина заливает мой txt на ftp, то от второй машины файл на фтп не появляется, потому что там уже есть такой файл. Замена не подойдет, потому что мне нужны все файлы со всех машин. По этому ищу рабочее решение отправки на email. В общем буду признателен за помощь.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.02.2016, 09:49
Ответы с готовыми решениями:

Отправка писем с Exchange c "MAIL FROM:<> "
Здравствуйте, возможно если кто-то не читал мою предыдущую тему, начну издалека : стали долго...

Отправка файла по e-mail
не подскажете есть ли в Ора какая нибудь системная функция или процедура с помощью которой можно...

Отправка файла на e-mail
Нужно отправить файл на электронный адрес. На форме находятся DropDownList с которого выбирается...

Отправка файла на почтовый ящик mail.ru
Подскажите пожалуйста как отправить выбранный файл в visual basiс 6.0 на почтовый ящик mail.ru, не...

14
886 / 188 / 16
Регистрация: 18.07.2011
Сообщений: 260
15.02.2016, 14:07 2
Про blat согласен, но это решается использованием почтовых сервисов без ssl c пересылкой на mail, yandex.
C ftp тоже проблем быть не должно. Можно для каждого компьютера иметь папку. Можно переименовывать перед отправкой. Можно архивировать и сохранять на ftp архивы, если нужно сохранять оригинальные имена файлов.
Есть и другие варианты
1
4 / 4 / 2
Регистрация: 30.11.2015
Сообщений: 29
16.02.2016, 09:41 3
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

malchik_And, вы знаете, у меня тоже были проблемы с настройкой и отправкой почты с помощью Cmail. Как оказалось, на той машине на которой я экспериментировал были закрыты порты, по которым шло общение. Вот хорошая инструкция, как это проверить. На целевой же машине сейчас все работает отлично с Gmail (правда, в настройках профиля нужно разрешить доступ недоверенным приложениям)
Вот это у меня работает:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@ECHO OFF
title MAIL
 
set host=login1@gmail.com
set password=passwordforlogin1
set smtp=smtp.gmail.com
set smtpport=587
set from=login1@gmail.com
set to=login2@gmail.com
set subject=Тема.
set body=Тело сообщения.
set addons=d:/logfile/tasklog.html
set addons2=d:/logfile/inetpwrlog.txt
"c:\Program Files\Cmail\CMail.exe" -host:%host%:%password%@%smtp%:%smtpport% -from:%from% -to:%to% -subject:"%subject%" -body:"%body%" -a:%addons% -a:%addons2% -starttls
3
1 / 1 / 0
Регистрация: 22.01.2016
Сообщений: 29
17.02.2016, 00:09  [ТС] 4
Всем спасибо за ответы. Решил проблему более удобным для меня способом, нашел программу mailsend (поддерживает SSL), протестил на Яндексе, работает.
0
393 / 311 / 36
Регистрация: 30.01.2015
Сообщений: 1,327
17.02.2016, 08:34 5
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

Я использую другой метод. Прописываю в батнике команды, которые создадут vbs-файл и его же запустят. Вот пример (создать в кодировке windows-1251):
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
@echo off
set f=%~dp0
set ORGANIZATION=Рога и копыта
set SMTPSERVER=smtp.yandex.ru
set SMTPPORT=25
SET MAILTO=email@yandex.ru
set MAILFROM=email@yandex.ru
set MAILLOGIN=email
set MAILPASSWORD=password
set subject=тема сообщения
 
::Отправка почты через WSH. Создаём файл Sendmail.vbs со следующим содержимым.
echo on error resume next>"%f%Sendmail.vbs"
echo Dim objFS, objEmail, objLog>>"%f%Sendmail.vbs"
echo Dim strEmail, strSMTP, strLog>>"%f%Sendmail.vbs"
echo Dim objTextStream, TXT, s>>"%f%Sendmail.vbs"
echo set objFS = CreateObject("Scripting.FileSystemObject")>>"%f%Sendmail.vbs"
echo set objEmail = CreateObject("CDO.Message")>>"%f%Sendmail.vbs"
echo strEmail = "%MAILFROM%">>"%f%Sendmail.vbs"
echo strSMTP = "%SMTPSERVER%">>"%f%Sendmail.vbs"
echo strLog = "%f%Sendmail_log.txt">>"%f%Sendmail.vbs"
::В файле Report.txt содержится текст, который будет в теле письма
echo set objTextStream = objFS.GetFile("%f%Report.txt").OpenAsTextStream(1)>>"%f%Sendmail.vbs"
echo TXT = objTextStream.ReadAll()>>"%f%Sendmail.vbs"
echo objTextStream.Close>>"%f%Sendmail.vbs"
echo set objTextStream = Nothing>>"%f%Sendmail.vbs"
echo if (objFS.FileExists(strLog)) then>>"%f%Sendmail.vbs"
echo     set objLog = objFS.OpenTextFile(strLog, 8, False)>>"%f%Sendmail.vbs"
echo else>>"%f%Sendmail.vbs"
echo     set objLog = objFS.CreateTextFile(strLog, False)>>"%f%Sendmail.vbs"
echo end if>>"%f%Sendmail.vbs"
echo objEmail.From = "%ORGANIZATION% <%MAILFROM%>">>"%f%Sendmail.vbs"
echo objEmail.To = "%MAILTO%">>"%f%Sendmail.vbs"
echo objEmail.Subject = "%subject%">>"%f%Sendmail.vbs"
echo objEmail.Textbody = TXT>>"%f%Sendmail.vbs"
::Для отправки нескольких файлов надо указать каждый из них отдельно (новой строкой)
echo objEmail.AddAttachment "%f%Прикрепляемый_к_сообщению.файл">>"%f%Sendmail.vbs"
echo if Err.Number ^<^> 0 then>>"%f%Sendmail.vbs"
echo     s = "">>"%f%Sendmail.vbs"
echo     s = "Err.Number: " ^& Hex(Err.Number) ^& vbCrLf ^& _>>"%f%Sendmail.vbs"
echo         "Source: " ^& Err.Source ^& vbCrLf ^& _>>"%f%Sendmail.vbs"
echo         "Reason: " ^& Err.Description>>"%f%Sendmail.vbs"
echo     objLog.Write(s)>>"%f%Sendmail.vbs"
::echo     msgbox(s)>>"%f%Sendmail.vbs"
echo end if>>"%f%Sendmail.vbs"
echo objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = ^2>>"%f%Sendmail.vbs"
echo objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTP>>"%f%Sendmail.vbs"
echo objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = %SMTPPORT%>>"%f%Sendmail.vbs"
echo objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = ^1>>"%f%Sendmail.vbs"
echo objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "%MAILLOGIN%">>"%f%Sendmail.vbs"
echo objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "%MAILPASSWORD%">>"%f%Sendmail.vbs"
echo objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True>>"%f%Sendmail.vbs"
echo objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = ^60>>"%f%Sendmail.vbs"
echo objEmail.Configuration.Fields.Update>>"%f%Sendmail.vbs"
echo objEmail.Send>>"%f%Sendmail.vbs"
echo if Err.number ^<^> 0 then>>"%f%Sendmail.vbs"
echo     s = "">>"%f%Sendmail.vbs"
echo     s = "Err.Number: " ^& Hex(Err.Number) ^& vbCrLf ^& _>>"%f%Sendmail.vbs"
echo         "Source: " ^& Err.Source ^& vbCrLf ^& _>>"%f%Sendmail.vbs"
echo         "Reason: " ^& Err.Description>>"%f%Sendmail.vbs"
echo     objLog.Write(s)>>"%f%Sendmail.vbs"
::echo     msgbox(s)>>"%f%Sendmail.vbs"
echo end if>>"%f%Sendmail.vbs"
echo objLog.Close>>"%f%Sendmail.vbs"
echo set objLog = Nothing>>"%f%Sendmail.vbs"
echo set objFS = Nothing>>"%f%Sendmail.vbs"
 
cscript "%f%Sendmail.vbs"
 
DEL /f /q "%f%Sendmail.vbs"
DEL /f /q "%f%Sendmail_log.txt"
тут у меня конечно немного лишнего: типа создания лога о самой отправке и отправка в любом случае. даже если будет отсутствовать файлы, указанные в коде. Но ты можешь отредактировать под себя.
P.S.: для mail.ru настройки похожие (smtp.mail.ru, порт тот же, логин указывать как и сама почта (вместе с @). у yandex не надо в логине указывать @ и что после нее)
2
0 / 0 / 0
Регистрация: 24.03.2016
Сообщений: 11
04.04.2016, 17:01 6
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@ECHO OFF
title MAIL
 
set host=login1@gmail.com
set password=passwordforlogin1
set smtp=smtp.gmail.com
set smtpport=587
set from=login1@gmail.com
set to=login2@gmail.com
set subject=Тема.
set body=Тело сообщения.
set addons=d:/logfile/tasklog.html
set addons2=d:/logfile/inetpwrlog.txt
"c:\Program Files\Cmail\CMail.exe" -host:%host%:%password%@%smtp%:%smtpport% -from:%from% -to:%to% -subject:"%subject%" -body:"%body%" -a:%addons% -a:%addons2% -starttls
Подскажите, пожалуйста, профессионалы. Данный код я сохраняю в *.bat , а после этого компилирую в *.exe. Теперь изменить настройки невозможно в *.exe - шнике. Как сделать так, чтоб настройки для отправки сообщения коммандный файл\программа брала из отдельного текстового файла настроек (1.txt), чтоб данный коммандный файл был универсальным.
0
3899 / 1538 / 261
Регистрация: 10.12.2013
Сообщений: 5,258
04.04.2016, 17:25 7
Профессионалы советуют:
после удаления скомпилированного .exe у тебя остаётся .bat, который представляет собой текстовый файл
с настроенными текстовыми полями.
более того, заменив значения конкретных полей на environment-variables,
ты получаешь параметризированный шаблон.
1
3446 / 1984 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
04.04.2016, 17:38 8
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

Сохраните файл "1.txt" с текстом

Код
set host=login1@gmail.com
set password=passwordforlogin1
set smtp=smtp.gmail.com
set smtpport=587
set from=login1@gmail.com
set to=login2@gmail.com
set subject=Тема.
set body=Тело сообщения.
set addons=d:/logfile/tasklog.html
set addons2=d:/logfile/inetpwrlog.txt
в каком-нибудь определённом месте, например, в системной папке "Temp" ("%TEMP%").

И тогда код пакетного файла будет таким:

Windows Batch file
1
2
3
4
5
6
7
@echo off
title MAIL
 
for /f "usebackq delims=" %%i in ("%TEMP%\1.txt") do %%i
"C:\Program Files\Cmail\CMail.exe" -host:%host%:%password%@%smtp%:%smtpport% -from:%from% -to:%to% -subject:"%subject%" -body:"%body%" -a:%addons% -a:%addons2% -starttls
 
exit/b
.
2
0 / 0 / 0
Регистрация: 24.03.2016
Сообщений: 11
05.04.2016, 16:31 9
ComSpec, Спасибо за оперативный ответ. Коммандный файл работает и корректно пересылает вложения, но только, если у вложений фиксированное название, например Vasja.txt. Если я хочу переслать запароленный архив, имя которого - текущая дата и время - происходит ошибка, письмо не отправляется...Каждый раз имя отправляемого файла архива разное...

Отправка.bat

Windows Batch file
1
2
3
for /f "usebackq delims=" %%i in ("1.txt") do %%i
 
sendmail.exe -smtp %smtpserver% -port %smtpport% -ssl -auth -user %smtpuser% -pass %smtppwd% -t %mailto% -f "%smtpsender%" -name "%smtpsenderfullname%" -cs 1251 +cc +bc -q  -sub %subject%  -attach "%bodyfile%,text/plain,i" -attach "%attach%,text/plain,a"
Файл 1.txt

Код
set smtpsender=trakhtenberg@yandex.ru
set smtpsenderfullname=trakhtenberg
set smtpserver=smtp.yandex.ru
set smtpport=465
set smtpuser=trakhtenberg@yandex.ru
set smtppwd="123456"
set mailto=trakhtenberg@mail.ru
set subject="test"
set bodyfile=c:\ru-RU\*.rar
set attach=c:\ru-RU\*.rar
Подскажите, пожалуйста, где ошибка?
0
3446 / 1984 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
05.04.2016, 17:51 10
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

Цитата Сообщение от Нейтрино Посмотреть сообщение
Подскажите, пожалуйста, где ошибка?


Просто "sendmail.exe" не "понимает" подстановочные символы, поэтому нужно переприсваивать значения соответствующим переменным, например, с помощью дополнительных циклических операций:

Windows Batch file
1
2
3
4
5
6
7
@echo off
 
for /f "usebackq delims=" %%i in ("1.txt") do %%i
for %%i in ("%bodyfile%") do set bodyfile=%%i
for %%i in ("%attach%") do set attach=%%i
 
sendmail.exe -smtp %smtpserver% -port %smtpport% -ssl -auth -user %smtpuser% -pass %smtppwd% -t %mailto% -f "%smtpsender%" -name "%smtpsenderfullname%" -cs 1251 +cc +bc -q  -sub %subject%  -attach "%bodyfile%,text/plain,i" -attach "%attach%,text/plain,a"
.

Содержимое файла "1.txt" оставьте таким же, как в Вашем примере:

Код
set smtpsender=trakhtenberg@yandex.ru
set smtpsenderfullname=trakhtenberg
set smtpserver=smtp.yandex.ru
set smtpport=465
set smtpuser=trakhtenberg@yandex.ru
set smtppwd="123456"
set mailto=trakhtenberg@mail.ru
set subject="test"
set bodyfile=c:\ru-RU\*.rar
set attach=c:\ru-RU\*.rar
.
1
0 / 0 / 0
Регистрация: 24.03.2016
Сообщений: 11
06.04.2016, 14:14 11
ComSpec, Огромное, ВАМ, спасибо. Я бы точно голову сломал! Теперь все прекрасно работает!!!

Добавлено через 19 часов 52 минуты
Извините, еще раз. Опять не могу разобраться с коммандами...
Это батник, который делает снимок вебкой 1.bat:

Windows Batch file
1
2
3
4
for /f "usebackq delims=" %%i in ("1.txt") do %%i
for %%i in ("%Camera%") do set Camera=%%i
 
ffmpeg.exe -f dshow -i video="%Camera%" -s 1280x1024 -f image2 000.jpg
А это файл 1.txt:
Код
set Camera="A4 TECH PC Camera H"
Никак не хочет скопировать название "A4 TECH PC Camera H" в батник. Как следствие девайс "обзывает" "[H"-снимок не происходит.
В виде:
Windows Batch file
1
ffmpeg.exe -f dshow -i video="A4 TECH PC Camera H" -s 1280x1024 -f image2 000.jpg
все прекрасно работает...
Может проблемма в пробелах?
0
393 / 311 / 36
Регистрация: 30.01.2015
Сообщений: 1,327
06.04.2016, 14:27 12
Цитата Сообщение от Нейтрино Посмотреть сообщение
Код
set Camera="A4 TECH PC Camera H"
кажется тут кавычки лишние
1
0 / 0 / 0
Регистрация: 24.03.2016
Сообщений: 11
06.04.2016, 14:36 13
Точно, нашел вариант, который работает, правда снимки получаются светлые.
Вот:
Windows Batch file
1
2
3
4
for /f "usebackq delims=" %%i in ("1.txt") do %%i
for %%i in ("%Camera%") do set Camera=%%i
 
ffmpeg.exe -f dshow -i video=%Camera% -s 1280x1024 -f image2 000.jpg
А в 1.txt:
Код
set Camera=A4 TECH PC Camera H
Теперь могу подключать разные камеры
Спасибо огромное за ответ!
0
10 / 10 / 3
Регистрация: 08.07.2015
Сообщений: 172
16.08.2016, 15:44 14
Настроил отправку письма через CMAIL как писал ComSpec. За что отдельное спасибо.
Возникла проблема с вложениями, в названии которых есть русские слова. Файл приходит на почту без названия. Как это можно победить?
Спасибо.
0
88 / 82 / 42
Регистрация: 27.09.2015
Сообщений: 316
16.08.2016, 20:21 15
mol2751, попробуйте добавить в начале файла
Windows Batch file
1
>nul chcp 1251
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.08.2016, 20:21

Отправка писем на mail.ru из стороннего файла
Как из файла php отправить электронное письмо на сайте joomla. Сервер - локальный.

Отправка письма на mail.ru через PHP mail()
Добрый день! Перелопатил много чего. Подскажите как все-таки отправить письмо на мэил.ру при помощи...

Отправка E-mail из 1С 7.7
У кого-нибудь есть положительный опыт по отправке электронной почты из 1С 7.7? В частности с...

Отправка mail()
&lt;?php $back_page = $_SERVER; $server_name = $_SERVER; if(!$back_page) { die(&quot;Вам сюда...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.