|
140 / 74 / 18
Регистрация: 21.02.2014
Сообщений: 3,444
|
||||||
Не сохраняются учетные данные при отправке почты10.08.2015, 12:52. Показов 4443. Ответов 40
Метки нет (Все метки)
Добрый день! Пытаюсь отправить почту. Проблема в том что PowerShell при запуске скрипта выдает авторизационную форму в которой нужно ввести учетные данные, хотя я их сохранил в переменную $credentials.
0
|
||||||
| 10.08.2015, 12:52 | |
|
Ответы с готовыми решениями:
40
Ошибка при отправке почты!!! |
|
88 / 88 / 37
Регистрация: 28.11.2012
Сообщений: 309
|
|
| 10.08.2015, 15:20 | |
|
а если перед $password и $credentials поставить ; что нибудь изменится? или разнести их на разные строчки
0
|
|
|
|
|
| 10.08.2015, 15:58 | |
|
Пишите пока (раз синтаксис не освоен) - каждую команду (вплоть до инструкций присвоения значений) в одну строку. Конвейер пока явно не для вас. Синтаксис неверный. В самом начале у вас идет присвоение значения двум переменным - но внезапно во всех ЯП разные инструкции должны как-то разделяться (и не пробелом). И аргументы командлету (имею ввиду ConvertTo-SecureString) так не передаются. Хотите в одну строку впихнуть как можно больше - тогда скобками оформите блок кода с присвоением, чтобы PoSH понял, чего от него хотят.
0
|
|
|
140 / 74 / 18
Регистрация: 21.02.2014
Сообщений: 3,444
|
|
| 10.08.2015, 17:54 [ТС] | |
|
Power Shell если не ошибаюсь не ЯП, в bat скриптах мы же не используем ;
Добавлено через 52 секунды поставил между предложениями ; не помогает какие еще есть разграничители? Добавлено через 10 минут Поставил везде конвееры-не работает, записал все в одну строку-не работает Добавлено через 10 минут где почитать про оформление, не могу найти
0
|
|
|
|
||||||||||||||
| 10.08.2015, 18:33 | ||||||||||||||
|
Cdelphi78,
Если Вы все будете писать в одну строку, это будет каша, которую Вы через некоторое время и сами понять не сможете(по-собственному опыту) Во-вторых: Попробуйте выполнить командлет
0
|
||||||||||||||
|
140 / 74 / 18
Регистрация: 21.02.2014
Сообщений: 3,444
|
|||||||||||||
| 10.08.2015, 20:49 [ТС] | |||||||||||||
|
Добавлено через 12 минут Добавлено через 22 минуты Сделал вот так:
0
|
|||||||||||||
|
|
||||||||||||||
| 10.08.2015, 21:41 | ||||||||||||||
![]() И даже в bat мы используем амперсанд для разделение команд в одной стоке - echo test & dir А в VBS - :. --------------------------------
Синтаксически более верно будет так (точки с запятой просто для демонстрации визуального отделения команд - они требуются в PoSH только для однострочной записи:
Добавлено через 5 минут
Добавлено через 42 минуты Насчет ConvertTo-SecureString - командлет ведь принимает без параметров только зашифрованную строку. А обычную только с параметрами -AsPlainText -Force. И конвейер в данном случае все-таки работает - тут я ошибся, думая что требуются скобки, а оказывается пароль в виде простого текста нужно было с дополнительными параметрами использовать.
0
|
||||||||||||||
|
140 / 74 / 18
Регистрация: 21.02.2014
Сообщений: 3,444
|
||||||||||
| 10.08.2015, 22:19 [ТС] | ||||||||||
|
Добавлено через 4 минуты Добавлено через 29 минут Пароль записывал в файл этой строкой
0
|
||||||||||
|
|
||||||
| 10.08.2015, 23:06 | ||||||
|
В общем я сам тут промучился час пока получилось отправить почту самому себе.
Пароль у меня в файле plain text-ом лежит, хотя можно, конечно, и зашифровать как у вас. Если будет ошибка по таймауту - возможно порт не тот. Я сначала 465 использовал (он вроде как для SSL у mail), потом на 25 выставил - с ним письмо отправилось. Вот рабочий вариант:
Заметил у себя одну ошибку - неинициализированная переменаня $user (должно быть $fromUser). Однако работает и так. В общем, странность какая-то. Буду позже разбираться.
1
|
||||||
|
140 / 74 / 18
Регистрация: 21.02.2014
Сообщений: 3,444
|
|
| 10.08.2015, 23:10 [ТС] | |
|
Вот это вы тут наворотили)) Ну ладно завтра гляну, такого даже на msdn нет)
Добавлено через 3 минуты Да странность это не то слово, казалось бы такая обыденная и нужная вещь(для чего нужен PS) а нигде толком не описывается, а если и описывается то без бубена не обойтись.
0
|
|
|
|
||||||
| 10.08.2015, 23:22 | ||||||
|
До кучи еще один рабочий вариант (аргументы передаются те же самые):
0
|
||||||
|
140 / 74 / 18
Регистрация: 21.02.2014
Сообщений: 3,444
|
|
| 11.08.2015, 09:58 [ТС] | |
|
Первый не взлетел, попробую второй)
Добавлено через 7 минут второй тоже самое))
0
|
|
|
|
|
| 11.08.2015, 14:18 | |
|
А через любой другой SMTP клиент вообще работает? Например, Mozilla Thunderbird.
И какие сервера используете? Если mail, gmail, yandex, то проверьте настройки по тем рекомендациям. (Можете с портами поэкспериментировать - у меня и 2525 работает.) И как насчет политики вашего провайдера - если что-то не работает у вас, но работает у других - проблема зачастую в посреднике. Или в настройках самой корпоративной сети. Я уж молчу про антивири - у меня тот же Avast каждое отправленное таким образом письмо проверяет и фигачит к нему свою подпись "Это сообщение проверено на вирусы антивирусом Avast"
0
|
|
|
140 / 74 / 18
Регистрация: 21.02.2014
Сообщений: 3,444
|
||
| 11.08.2015, 14:46 [ТС] | ||
!Дело не в соединении, до соединения еще недошло) ети скрипты запрашивают логин/пароль, а они не должны его запрашивать потому что учетные данные сохранены.
0
|
||
|
|
|||||||||||
| 11.08.2015, 17:33 | |||||||||||
|
Хорошо. Но вы уверены, что сохранили все верно? Я сохранял пароль в файле и как plaintext, так и в зашифрованном виде через
PowerShell Read-host -Prompt "enter password" -AsSecureString |ConvertFrom-SecureString -Key @(1..32) > pass.txt Тип строки, которая возвращает ConvertTo-SecureString должен быть System.Security.SecureString. Это проверяется простым выводом переменной $password (или той что у вас) в консоль. Вот этой хак-функцией можно даже выдернуть пароль обратно из secure: Кликните здесь для просмотра всего текста
...Не знаю как вам удобнее, но я себе сделал такой "пролог" для функций отправки:
1
|
|||||||||||
|
140 / 74 / 18
Регистрация: 21.02.2014
Сообщений: 3,444
|
|||
| 11.08.2015, 17:44 [ТС] | |||
|
я сохранял пароль вот этой строкой
PowerShell $credentials.Password | ConvertFrom-SecureString | Set-Content pass.txt Добавлено через 6 минут Добавлено через 2 минуты Добавлено через 1 минуту Что такое try,catch,resdhost?
0
|
|||
|
|
|||||||||||||||||
| 11.08.2015, 22:11 | |||||||||||||||||
|
Я правильно понимаю, что учетные данные вы сохраняли так:
PowerShell $credentials = Get-Credential -Credential "user@domen.ru" Есть ли какая-то серьезная разница между этим и моим вариантом - утверждать не буду. В примерах делается сохранение учетных данных и так и эдак. Для проверки: в коде после операции сохранения учетных данных добавьте с новой строки строку: $credentials.Password или даже просто $credentials и посмотрите что появится в консоли.
try-catch Добавлено через 2 часа 20 минут Попробую расписать поподробнее, что мы должны сделать с учетными данными, чтобы почтовый командлет мог с ними работать. Кликните здесь для просмотра всего текста
1. Требуется(согласно вашей логике скрипта) сохранить пароль в виде зашифрованной строки в файле (чтобы снова и снова его не вводить):
Вариант a) PowerShell Read-host -Prompt "enter password" -AsSecureString |ConvertFrom-SecureString > pass.txt Далее пишем полученные данные в файл, в который должна записаться длинная строка из цифр и букв английского алфавита. Тоже самое можно сделать так: Вариант б) PowerShell $credential = Get-Credential "user@server.ru" Далее нам нужно так же как и в первом варианте преобразовать защищенную (SecureString) строку в зашифрованную и записать ее в файл. PowerShell $credentials.Password | ConvertFrom-SecureString | Set-Content pass.txt В чем плюс конструкции, которую я предложил ранее (постом выше). Все инструкции заключены в блок try\catch: в первом блоке строка считывается из файла и преобразуется в защищенную строку при условии, что данные уже сохранены. Если же это первый запуск скрипта, то командлет ConvertTo-SecureString выдаст ошибку, которая будет перехвачена (скрипт при этом не будет остановлен) в блоке try{} - управление программой будет передано в блок catch{}, в котором сначала данные будут введены\сохранены и только потом считаны в переменную. Повторный запуск скрипта уже не потребует ввода никаких данных, так как блок try{} будет выполняться без ошибок. В случае же использования варианта с Get-Credential - без специальных проверок - это окно будет появляться при каждом запуске скрипта и требовать ввести данные. Чтобы этого не было, нужен либо обычный логический блок
Соответственно если условие ложно - блок не будет выполняться. И никакого повторного вывода окна ввода данных. Либо - использовать данный командлет (и запись в файл) один раз , потом просто убрать эти строчки из кода. А дальше по логике скрипта идет уже чтение однажды сохраненного пароля из файла. PowerShell $password=ConvertTo-SecureString (cat pass.txt) Один в виде обычной строки - почтовый логин, второй - пароль как SecureString (в виде простого текста не прокатит, ибо тип параметра именно такой) Экземпляр класса сохраняется в переменной. PowerShell $credentials = New-Object –TypeName System.Management.Automation.PSCredential($fromUser,$password) # String, SecureString ----------------------------------------- Вариант с Get-Credential можно также оформить в try\catch блоки:
---------------------- Возможно вы брали скрипт из этой статьи Сохранение учетных данных в PowerShell, если нет - то прочитайте ее.
1
|
|||||||||||||||||
|
140 / 74 / 18
Регистрация: 21.02.2014
Сообщений: 3,444
|
|||
| 11.08.2015, 23:27 [ТС] | |||
|
Добавлено через 5 минут
0
|
|||
|
140 / 74 / 18
Регистрация: 21.02.2014
Сообщений: 3,444
|
|
| 12.08.2015, 10:15 [ТС] | |
|
этот powershel вообще шальной, то знаки какие то закрывающиеся требует то ошибки ищет в закомментироанной строке.
0
|
|
|
|
||
| 12.08.2015, 11:16 | ||
|
Cdelphi78
Судя по ошибке вы чего-то в хэш-таблице $Parameters поменяли. Может выложите полный текст вашего варианта скрипта - убрав, разумеется ваши секретные учетные данные ![]() -------------------------------------------------
мы явно не вызвали для нее метод Dispose - она какое-то время (сколько именно - непонятно, даже у Рихтера нет точного разъяснения ) будет висеть в памяти и быть доступной. После Dispose - полностью обнуляется и переменную становится невозможно использовать. Поэтому в целях безопасности стоит вызывать это метод сразу же по завершении всех манипуляций со строкой- например, в конце скрипта.
0
|
||
| 12.08.2015, 11:16 | |
|
Помогаю со студенческими работами здесь
20
Ошибка при отправке почты Зависает программа при отправке почты Зависает программа при отправке почты CDONTS при отправке почты не подключается Сообщение, при отправке почты в The Bat! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|