2013-07-13 5 views
0

나는이 문제를 며칠 동안 조사했으며이 사이트와 다른 사람들에 대한 많은 질문을 언급했지만 아무런 소용이 없습니다. 이 기능을 제외한 모든 기능이 작동합니다. 또한 Visual Studio에 나타나는 툴팁을 참조했지만 아무 것도 작동하지 않는 것 같습니다. 내 코드는 오류를 생성하지 않지만 전자 메일에는 첨부 파일이 없습니다. 다음은 참조 용으로 사용하는 코드입니다.vb.net에서 이메일에 첨부 파일이나 첨부 파일을 추가하는 방법

'Add Attachments from alist array' 
If alist.Count > 1 Then 
    For x As Integer = 1 To alist.Count - 1 
     Quick_Mail.email.Attachments.Add(New System.Net.Mail.Attachment(alist(x).ToString)) 
    Next 
End If 

첨부 파일을 추가하는 별도의 양식이 있기 때문에이 방법이 있습니다. 첨부 파일의 경로는 alist 배열에 문자열로 저장됩니다. 새로운 첨부 파일이 추가 될 때마다 alist가 보존됩니다. 이것은 첫 번째 위치는 내

Public Shared email As New MailMessage() 
Dim smtp As SmtpClient = New SmtpClient 
smtp.Credentials = New Net.NetworkCredential(user, pass) 
smtp.Host = host 
smtp.Port = port 
smtp.EnableSsl = False 
email = New MailMessage() 
email.From = New MailAddress(user) 
email.To = txt_to.text 
email.CC = txt_cc.text 
email.BCC = txt_bcc.text 
email.Subject = txt_subject.Text 
email.Body = txt_message.Text 

내가 공중으로 이메일을 전자 메일 설정의 나머지 부분에 대한 코드와 너무 첨부 양식 공유 1. 다음

X를 초기화하는 이유입니다 비어 원인 그것을 참조 할 수 있습니다.

모든 도움을 주시면 대단히 감사하겠습니다. 미리 감사드립니다.

+0

하나의'string'을 사용하는'Attachment' 생성자는 파일 경로를 필요로합니다. 그게 너가 지나가고있는거야? 응용 프로그램이 액세스 할 수있는 위치입니까? – Oded

+0

"C : \ Users \ Public \ Documents \ text.txt"와 같은 문자열을 전달합니다. 내 사용자 계정, 공용 계정의 파일을 사용하여 C 드라이브에서 직접 시도했습니다. 아무것도 작동하지 않습니다. – ZeverMX

답변

0

이메일을 보낼 코드 앞에 첨부 파일을 추가하는 루프를 호출한다고 가정합니다. 이 다음의 경우 경우에 당신은 다시 변수 이메일을 다시 초기화하고 그러나 항상 문제가 될 것입니다 이런 종류의 문제에 대한 공유 변수를 유지하는 이전의 첨부 파일

Public Shared email As New MailMessage() 
Dim smtp As SmtpClient = New SmtpClient 
smtp.Credentials = New Net.NetworkCredential(user, pass) 
smtp.Host = host 
smtp.Port = port 
smtp.EnableSsl = False 
' THIS LINE REINITIALIZE THE EMAIL AND KILLS THE ATTACHMENTS 
' email = New MailMessage() 
email.From = New MailAddress(user) 
email.To = txt_to.text 
email.CC = txt_cc.text 
email.BCC = txt_bcc.text 
email.Subject = txt_subject.Text 
email.Body = txt_message.Text 

을 잃게됩니다. 하위 코드에서이 코드를 분리하고 첨부 파일 목록을이 하위 코드로 전달하여 Shared 변수가 노출되지 않도록해야하는 이유는 무엇입니까?

Public Sub SendMail(alist as List(Of String)) 
    Dim email = New MailMessage() 
    Dim smtp = New SmtpClient() 

    For x As Integer = 1 To alist.Count - 1 
     email.Attachments.Add(New Attachment(alist(x).ToString)) 
    Next 

    smtp.Credentials = New Net.NetworkCredential(user, pass) 
    smtp.Host = host 
    smtp.Port = port 
    smtp.EnableSsl = False 
    email.From = New MailAddress(user) 
    email.To = txt_to.text 
    email.CC = txt_cc.text 
    email.BCC = txt_bcc.text 
    email.Subject = txt_subject.Text 
    email.Body = txt_message.Text 
    smtp.Send(email) 
End Sub 
+0

이메일은 글로벌 공개 공유 변수이므로 이메일이 다시 초기화되지 않습니다. 첨부 파일을 추가하고 추가 양식에서 호출하는 공용 서브를 만들려고했지만 그 중 하나가 작동하지 않습니다. 첨부 파일을 열심히 코딩하려고 시도했지만 작동하지 않았습니다. – ZeverMX

+0

email = new MailMessage가 공유 변수를 다시 초기화하면 첨부 파일이 사라집니다. 당신은 디버거와 단계를 밟을 수 있으며, 이후에 Attachments 컬렉션을 확인하십시오 – Steve

+0

고마워, 그게 문제 였어. – ZeverMX

관련 문제