Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Не могу удалить файл!!! Что делать? / 13 сообщений из 13, страница 1 из 1
22.08.2014, 11:40
    #38726434
crazyara
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу удалить файл!!! Что делать?
Dim atcname
per = tr.ReadLine()
tr.Close()
per = Right(per, Len(per) - 7)

myemail = Trim(EMAIL(per))
mypwd = Trim(PWD(per))
atcname = GetAttach(per)
If atcname <> "" Then
PrintLog2("Есть что отправлять")
Else
alreadyProcessing = False
PrintLog2("Нечего отправлять")
Exit Try

End If

Dim m As New MailMessage _
(myemail, "test@mail.ru", "SCREENS", atcname)
m.Attachments.Add(New System.Net.Mail.Attachment(atcname))



Dim sc As SmtpClient = New SmtpClient
sc.Host = "smtp.mail.ru"
sc.Port = 25
' sc.EnableSsl = True

sc.Timeout = 900000

sc.UseDefaultCredentials = False

sc.Credentials = New NetworkCredential(myemail, mypwd)

'sc.Send(mm)

sc.Send(m)
PrintLog2("Сообщение отправлено")
m.Dispose()
sc.Dispose()
My.Computer.FileSystem.DeleteFile(atcname)
PrintLog2("Файл архива удален")

____________________________
Здесь отправляется файл по емэйл, после отправки файл должен удаляться. На некоторых компах с хорошим нетом, дает удалить файл вложения после отправки. На другом (пока на одном выявилось), сообщение отправляет, пишет в лог сообщение отправлено
но зависает на удалении файла вложения. Что делать? Поставил dispose , может не их а что-то другое нужно ставить?
Что может блокировать файл вложения
...
Рейтинг: 0 / 0
22.08.2014, 12:26
    #38726513
crazyara
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу удалить файл!!! Что делать?
Таймер запущен ___22.08.2014 11:49:12
Мы-сервер, пытаемся отправить почту
Есть что отправлять
Сообщение отправлено
Файл архива удален
Таймер запущен ___22.08.2014 11:54:12
Мы-сервер, пытаемся отправить почту
Есть что отправлять
Сообщение отправлено
Файл архива удален
Таймер запущен ___22.08.2014 11:56:08
Мы-сервер, пытаемся отправить почту
Есть что отправлять
Сообщение отправлено
__________________________
и вот так останавливается и зависает , в смысле исключения не возникает
...
Рейтинг: 0 / 0
22.08.2014, 13:33
    #38726639
carrotik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу удалить файл!!! Что делать?
crazyara,

Thread.Sleep секунды на три перед удалением .. неотесанный костыль, но работает ...
...
Рейтинг: 0 / 0
22.08.2014, 15:34
    #38726826
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу удалить файл!!! Что делать?
crazyara Что может блокировать файл вложения Блокирует процесс отправки сообщения.

crazyara Что делать? Удалять файл после завершения отправки сообщения .
...
Рейтинг: 0 / 0
22.08.2014, 16:06
    #38726896
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу удалить файл!!! Что делать?
crazyara, блокировка должна сниматься с файла после вызова Dispose() для MailMessage. Я бы переписал код используя блок Using
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Using m As New MailMessage(myemail, "test@mail.ru", "SCREENS", atcname)
	m.Attachments.Add(New System.Net.Mail.Attachment(atcname))
	
	Using sc As SmtpClient = New SmtpClient
		sc.Host = "smtp.mail.ru"
		sc.Port = 25
		' ....
		sc.Send(m)
		PrintLog2("Сообщение отправлено")
	End Using
End Using

My.Computer.FileSystem.DeleteFile(atcname)
PrintLog2("Файл архива удален")
...
Рейтинг: 0 / 0
22.08.2014, 21:04
    #38727131
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу удалить файл!!! Что делать?
bazile, зачем учить человека не совсем хорошему?
А ежели письмо не будет отослано, а он всё равно файл грохнет ?!

А так глядишь и работу в асинхронном режиме изучит и поймёт, что не всё так просто в датском королевстве...
...
Рейтинг: 0 / 0
22.08.2014, 22:05
    #38727142
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу удалить файл!!! Что делать?
Честно сказать, "странноватая" реализация работы с вложениями, которая после формирования тела письма не закрывает потоки, работающие с вложениями... Можно было-бы освобождать ресурсы после того как они уже не нужны, тело письма-то сформировано...

Исходник SmtpClient и далее по ссылкам...
...
Рейтинг: 0 / 0
23.08.2014, 00:13
    #38727161
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу удалить файл!!! Что делать?
Alex Kuznetsovbazile, зачем учить человека не совсем хорошему?
А ежели письмо не будет отослано, а он всё равно файл грохнет ?!
Если письмо не отправится, то метод Send() сгенерирует исключение и файл не будет удален.

Ты ведь сам неудачный совет дал. Событие SendCompleted сработает только при вызове SendAsync(), а ТС использует Send().
...
Рейтинг: 0 / 0
23.08.2014, 06:20
    #38727191
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу удалить файл!!! Что делать?
bazileAlex Kuznetsov...
Если письмо не отправится, то метод Send() сгенерирует исключение и файл не будет удален.Это то да, но где в таком случае перехват исключения?

bazileТы ведь сам неудачный совет дал. Событие SendCompleted сработает только при вызове SendAsync(), а ТС использует Send().И ещё написал:
Alex KuznetsovА так глядишь и работу в асинхронном режиме изучит и поймёт, что не всё так просто в датском королевстве...
Ладно, к чему спорить, и так и так можно, просто нужно быть уверенным, что процесс отправки письма завершён и ресурсы освобождены.
...
Рейтинг: 0 / 0
25.08.2014, 13:32
    #38728052
crazyara
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу удалить файл!!! Что делать?
Спасибо всем!
Сделал using, но теперь возникает ошибка при отправке больших файлов
интернет плохой (100 кб отправлянтся нормально, 1 мб ошибка)

Protected Sub tt_elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs)
Try

If alreadyProcessing2 Then
Exit Sub
End If

alreadyProcessing2 = True


Dim path As String = "c:\logXXX.txt"
Dim mypwd As String

Dim per As String
Dim myemail As String
'Dim tr As StreamReader = New StreamReader("c:\kurx\report.ini")
Dim tr As StreamReader = New StreamReader(My.Application.Info.DirectoryPath & "\" & "report.ini")
'My.Application.Info.DirectoryPath & "\" &

Dim atcname
per = tr.ReadLine()
tr.Close()
per = Right(per, Len(per) - 7)

myemail = Trim(EMAIL(per))
mypwd = Trim(PWD(per))
atcname = GetAttach(per)
If IsServer(per) <> "1" Then
alreadyProcessing2 = False
Exit Sub
End If

PrintLog2("Мы-сервер, пытаемся отправить почту")

If atcname <> "" Then
PrintLog2("Есть что отправлять___" & Date.Now.ToString & " файл " & atcname)
Else
alreadyProcessing2 = False
PrintLog2("Нечего отправлять__" & Date.Now.ToString)
Exit Try

End If

' Dim m As New MailMessage _
' (myemail, "test@mail.ru", "SCREENS", atcname)
' m.Attachments.Add(New System.Net.Mail.Attachment(atcname))


Using m As New MailMessage _
(myemail, "yug_test@mail.ru", "SCREENS", atcname)
m.Attachments.Add(New System.Net.Mail.Attachment(atcname))
PrintLog2("К сообщению добавлено вложение в ___" & Date.Now.ToString & " файл " & atcname)
Using sc As SmtpClient = New SmtpClient
sc.Host = "smtp.mail.ru"
sc.Port = 25
' sc.EnableSsl = True

sc.Timeout = 900000

sc.UseDefaultCredentials = False

sc.Credentials = New NetworkCredential(myemail, mypwd)


sc.Send(m)
PrintLog2("Сообщение отправлено____" & Date.Now.ToString)
m.Dispose()
sc.Dispose()
End Using
End Using

Thread.Sleep(300000)
My.Computer.FileSystem.DeleteFile(atcname)
PrintLog2("Файл архива удален____" & Date.Now.ToString)
alreadyProcessing2 = False

Catch ex As SmtpException
' WebException InnerException,

PrintLog2("Произошла ошибка при отправке ___" & Date.Now.ToString)
PrintLog2(ex.ToString)



Dim inner As Exception = ex.GetBaseException
PrintLog2(inner.Message.ToString)
PrintLog2("__________________")
alreadyProcessing2 = False

End Try
End Sub

возникает такая ошибка, из лог файла

Мы-сервер, пытаемся отправить почту
Есть что отправлять___25.08.2014 13:22:52 файл \\serverN\SCREENS\SERVERN_192.168.1.2_19082014.7z
К сообщению добавлено вложение в ___25.08.2014 13:22:52 файл \\serverN\SCREENS\SERVERN_192.168.1.2_19082014.7z
Произошла ошибка при отправке ___25.08.2014 13:22:53
System.Net.Mail.SmtpException: Failure sending mail. ---> System.IndexOutOfRangeException: Index was outside the bounds of the array.
at System.Net.Base64Stream.EncodeBytes(Byte[] buffer, Int32 offset, Int32 count, Boolean dontDeferFinalBytes, Boolean shouldAppendSpaceToCRLF)
at System.Net.Base64Stream.Write(Byte[] buffer, Int32 offset, Int32 count)
at System.Net.Mime.MimePart.Send(BaseWriter writer)
at System.Net.Mime.MimeMultiPart.Send(BaseWriter writer)
at System.Net.Mail.Message.Send(BaseWriter writer, Boolean sendEnvelope)
at System.Net.Mail.SmtpClient.Send(MailMessage message)
--- End of inner exception stack trace ---
at System.Net.Mail.SmtpClient.Send(MailMessage message)
at MonitorScreens.MonitorKurier.tt_elapsed(Object sender, ElapsedEventArgs e)
Index was outside the bounds of the array.


т.е. то возникает, то нет эта ошибка
прчем возникает через секунду после обработки
...
Рейтинг: 0 / 0
25.08.2014, 13:48
    #38728069
crazyara
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу удалить файл!!! Что делать?
Просто создаются архивы, 2- 10 мб, где-то и 10 нормально уходит, но в некоторых филиалах скорость 128 кбит,
и из-за этого наверное получается ошибка.
Можно, конечно разюивать архивы на тома и создавать больше сообщений, но нет ли другого выхода.
Таймаут я поставил, может еще что?
...
Рейтинг: 0 / 0
25.08.2014, 14:08
    #38728093
Alex Kuznetsov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу удалить файл!!! Что делать?
crazyaraПросто создаются архивы, 2- 10 мб, где-то и 10 нормально уходит, но в некоторых филиалах скорость 128 кбит,
и из-за этого наверное получается ошибка.
Можно, конечно разюивать архивы на тома и создавать больше сообщений, но нет ли другого выхода.
Таймаут я поставил, может еще что?Судя по сообщению об ошибке, ни скорость ни таймаут здесь ни причём. Ошибка связана с выходом за пределы массива во время декодирования файла. Попробуйте разбить на куски по 1 Мб, должно быстрее отрабатывать.
...
Рейтинг: 0 / 0
25.08.2014, 17:30
    #38728358
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу удалить файл!!! Что делать?
crazyara, как оказалось это известная проблема - FIX: "Failure sending mail" error message when you send an email message by using a .NET Framework 4.0-based application that uses the "System.Net.Mail.SmtpClient" class if the email attachment is larger than 3 MB

Запроси хотфикс у Microsoft или сделай размер аттачмента меньше 3 Мб

P.S. Используй тег SRC для оформления кода.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Не могу удалить файл!!! Что делать? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]