Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten
Autor
Nachricht
spidertimo
Newbie
Newbie

Anmeldedatum: 10.07.2008
Beiträge: 14

[VB6] Email mit Anhang
Verfasst am: 19.07.2008, 15:27

Hallo,
ich möchte per Vb6 eine Email mit 2 Dateien als Anhang versenden. Text versendet das Programm ohne Probleme, aber ich weiß nicht wie ich es mit dem Anhang hinbekommen könnte. Die Emails werden per Winsock versendet.

Wäre nett, wenn mir einer helfen könnte Wink
 
igoe
Gast





Verfasst am: 19.07.2008, 15:43

(spidertimo;5715)
Hallo,
ich möchte per Vb6 eine Email mit 2 Dateien als Anhang versenden. Text versendet das Programm ohne Probleme, aber ich weiß nicht wie ich es mit dem Anhang hinbekommen könnte. Die Emails werden per Winsock versendet.

Wäre nett, wenn mir einer helfen könnte Wink



http://www.devguru.com/features/tutorials/CDONTS/cdonts.html
Sollte eigentlich Funktionieren

Mfg Igoe
 
spidertimo
Newbie
Newbie

Anmeldedatum: 10.07.2008
Beiträge: 14


Verfasst am: 19.07.2008, 16:03

Tut leide rnicht [img]/ohmy.gif[/img]

der Source sieht so aus:
Form1
Visual Basic: [code]Option Explicit

Private Sub Form_Load()
TimeOut = 20
ProgressBar1.Min = 0
ProgressBar1.Value = 0
ProgressBar1.Max = TimeOut * 5

Text7.MultiLine = True
Text7.ScrollBars = 2 'vertikal

End Sub

Private Sub Command1_Click()
Label7.Caption = "" 'Statusfeld
Label7.BackColor = Form1.BackColor

Server = "mail.gmx.net" '<= eigenen Mailserver eingeben!
Sender_Name = "ABSENDERNAME" '<= angezeigter Absendername
Sender_Mail = "ABSENDERMAIL" '<= Absender Mailadresse
Benutzer = "MEIN BENUTZERNAME" '<= Benutzername des Mailaccounts
Password = "MEIN PASSWORT" '<= Passwort des Mailaccounts
Domain = "Test.org" '<= Inhalt scheint egal, muss aber sein

Receiver_Mail = "EMPFÄNGER MAILADRESSE" '<= Empfänger Mailadresse

Subject = "Mailtest" '<= Betreffzeile
Mailtext = "Das ist nur ein Test!" & vbCrLf & "Mit zweiter Zeile" '<= Inhalt der Mail

sendmail_start

End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
'im Form stehen lassen, da es sich um eine Eigenschaft des Winsock-Elements handelt!
Form1.Winsock1.GetData Result
'Protokoll:
Form1.Text7.text = Form1.Text7.text & last_Call & Result
last_Call = ""

End Sub
Private Sub Timer1_Timer()
Sec = Sec + 1
Form1.ProgressBar1.Value = Sec - 1
DoEvents
End Sub[/code]

Module1
Visual Basic: [code]Option Explicit
Global Mailing As Boolean
Global Result As String
Global Sec As Integer
Global TimeOut As Integer
Global last_Call As String

Global Server As String
Global Sender_Name As String
Global Sender_Mail As String
Global Domain As String
Global Benutzer As String
Global Password As String
Global Benutzer64 As String 'Benutzername base64-codiert
Global Password64 As String 'Password base64 codiert

Global Receiver_Mail As String

Global Subject As String 'Betreff
Global Mailtext As String 'Mailbody
Global Sourcetext As String

Global var_base64
Global B64() As Byte

Function sendmail_start()
var_base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
'ReDim B64(63)
' Die Austauschtabelle wird in ein Bytearray uebertragen.
B64() = StrConv(var_base64, vbFromUnicode)
Benutzer64 = base64_encode(B64(), Benutzer)
Password64 = base64_encode(B64(), Password)

If Mailing = False Then
If Sendmail Then
ShowStatus ("E-Mail erfolgreich verschickt")
Form1.Label7.BackColor = vbGreen
Else
ShowStatus ("Fehler beim Versenden aufgetreten")
Form1.Label7.BackColor = vbRed
Exit Function
End If
Else
ShowStatus ("Letzte E-Mail wird noch gesendet !")
Form1.Label7.BackColor = vbRed
End If
End Function

Function Sendmail() As Boolean
On Error Goto ERRORMail


If Mailing = True Then Exit Function
Mailing = True
Form1.MousePointer = vbHourglass
Sourcetext = "" 'wichtig bei mehreren Mails nacheinander

If Form1.Winsock1.State = sckClosed Then 'keine bestehende Verbindung

Sourcetext = Sourcetext & "From: " & Sender_Name & " <" & Sender_Mail & ">"
Sourcetext = Sourcetext & vbCrLf & "Date: " & Format(Date, "Ddd")
Sourcetext = Sourcetext & ", " & Format(Date, "dd Mmm YYYY") & " "
Sourcetext = Sourcetext & Format(Time, "hh:mm:ss") & " +0100" & vbCrLf
Sourcetext = Sourcetext & "X-Mailer: Visual Basic Mailing Tester"
Sourcetext = Sourcetext & vbCrLf & "To: <" & Receiver_Mail & ">"
Sourcetext = Sourcetext & vbCrLf & "Subject: " & Subject & vbCrLf
Sourcetext = Sourcetext & vbCrLf & Mailtext & vbCrLf & vbCrLf & "." & vbCrLf

'### Verbindung aufbauen
ShowStatus ("Verbinde...")
'Form1.Winsock1.Protocol = sckTCPProtocol 'TCP ist Standardwert
'Form1.Winsock1.RemoteHost = Server 'wird direkt übergeben
Form1.Winsock1.LocalPort = 0
Form1.Winsock1.RemotePort = 25
Form1.Winsock1.Connect (Server)
last_Call = "Connect" & vbCrLf
If Not Response("220") Then Goto ERRORMail
'### Verbunden

ShowStatus ("Verbunden")


'wenn Auth gewünscht, muss wohl mit
Form1.Winsock1.SendData ("EHLO " & Domain & vbCrLf)
last_Call = "EHLO " & Domain & vbCrLf
'gearbeitet werden

'Form1.Winsock1.SendData ("HELO " & Domain & vbCrLf)
'last_Call = "HELO " & Domain & vbCrLf
'If Not Response("250") Then GoTo ERRORMail

'GoTo var_1: 'einfache Möglichkeit, um ohne Auth. zu arbeiten
'********* Authorisierung Anfang ******************
ShowStatus ("Authorisierung...")
Form1.Winsock1.SendData ("AUTH LOGIN" & vbCrLf)
last_Call = "AUTH LOGIN" & vbCrLf
If Not Response("334") Then Goto ERRORMail
' Zurück kommt "334 VXNlcm5hbWU6" und damit Aufforderung nach Bentz.

'Benutzername wird base64 codiert übergeben. (s.u.)
Form1.Winsock1.SendData (Benutzer64 & vbCrLf)
last_Call = "" & Benutzer64 & vbCrLf
If Not Response("334") Then Goto ERRORMail

'jetzt fordert Server mittels "334 UGFzc3dvcmQ6" das Passwort an
'Passwort wird base64 codiert und übergeben
' Zurück kommt die Antwort "235 ok" als erfolgreich
Form1.Winsock1.SendData (Password64 & vbCrLf)
last_Call = "" & Password64 & vbCrLf
If Not Response("235") Then Goto ERRORMail

' Anzahl & Größe der E-Mails abfragen
'Bei einigen Mailservern müssen vor Versenden vorliegende Mails abgefragt werden
'Hier reicht es im Allg. den Status abzurufen, ohne die Mails herunterzuladen:
'Bei vorheriger Authorisation scheint dies überflüssig zu sein!!
' Form1.Winsock1.SendData "stat" & vbCrLf
' last_Call = "Abfrage Posteingang"
'If Response Then GoTo ERRORMail

'********* Authorisierung Ende ******************

var_1:

'### Mail Senden

Form1.Winsock1.SendData ("MAIL FROM:<" & Sender_Mail & ">" & vbCrLf)
last_Call = "MAIL FROM:<" & Sender_Mail & ">" & vbCrLf
If Not Response("250") Then Goto ERRORMail

Form1.Winsock1.SendData ("RCPT TO:<" & Receiver_Mail & ">" & vbCrLf)
last_Call = "RCPT TO:<" & Receiver_Mail & ">" & vbCrLf
If Not Response("250") Then Goto ERRORMail

Form1.Winsock1.SendData ("DATA" & vbCrLf)
last_Call = "DATA" & vbCrLf
If Not Response("354") Then Goto ERRORMail
' Antwort ' 354 Enter mail, end with CRLF.CRLF

Form1.Winsock1.SendData (Sourcetext)
last_Call = "" & vbCrLf
If Not Response("250") Then Goto ERRORMail

'### Trennen
ShowStatus ("Trennen")
Form1.Winsock1.SendData ("quit" & vbCrLf)
Form1.Text7.text = Form1.Text7.text & "quit" & vbCrLf
'If Not Response("221") Then GoTo ERRORMail
'wenn hier ein Fehler kommt, ist die Nachricht erfahrungsgemäss trotzdem gesendet
ShowStatus ("Nachricht verschickt !")
Sendmail = True

Else

End If

ERRORMail:
Form1.Winsock1.Close
Form1.MousePointer = vbDefault
Mailing = False

End Function

Function Response(RCode$) As Boolean
Sec = 0
Form1.Timer1.Interval = 200
Form1.Timer1.Enabled = True
Response = True

'Do While Left$(Result, 3) <> RCode '<= Prob: einger Server senden mehrere Replys
Do While InStr(1, Result, RCode) = 0 '<= hier nehmen wir aber nur den letzten Reply
DoEvents
If Sec > TimeOut * 5 Then
If Len(Result) Then
ShowStatus ("SMTP Error! Falscher Rückgabewert")
Else
ShowStatus ("SMTP Error! Time out")
End If

Response = False
Exit Do
End If
Loop

Result = ""
Form1.ProgressBar1.Value = 0
Form1.Timer1.Enabled = False
End Function
Function base64_encode(Code2() As Byte, Source As String) As String
On Error Goto base64_encode_Err

Dim n As Long
Dim i As Long
Dim c1 As Integer
Dim c2 As Integer
Dim c3 As Integer
Dim w(4) As Integer
Dim sourceB() As Byte
Dim Result() As Byte
Dim l As Long
Dim k As Long
Dim rest As Long
Dim cnt

l = Len(Source)
If l = 0 Then
Exit Function
End If
sourceB() = StrConv(Source, vbFromUnicode)

rest = l Mod 3
If rest > 0 Then
n = ((l 3) + 1) * 3
ReDim Preserve sourceB(n - 1)
Else
n = l
End If

ReDim Result(4 * n / 3 - 1) ' Das Ergebnis ist 4/3 mal so lang
cnt = 0
For i = 0 To n / 3 - 1
k = 3 * i 'Damit k nur ein- statt dreimal berechnet werden muss.
c1 = sourceB(k) ' Je drei Byte werden gelesen
c2 = sourceB(k + 1)
c3 = sourceB(k + 2)

w(1) = Int(c1 / 4) ' Je 6 Bit werden extrahiert
w(2) = (c1 And 3) * 16 + Int(c2 / 16)
w(3) = (c2 And 15) * 4 + Int(c3 / 64)
w(4) = c3 And 63

k = 4 * i 'Dami k nur ein- statt viermal berechnet werden muss
Result(k) = B64(w(1)) ' Die 6-Bit-Werte werden nach Tabelle
Result(k + 1) = B64(w(2)) ' durch Zeichen ersetzt.
Result(k + 2) = B64(w(3))
Result(k + 3) = B64(w(4))

Next i
' Je nach ueberzaehligen Bytes im Ergebnis wird dieses
' Fuellbytes aufgefuellt. Das Fuellbyte ist ein "="

Select Case rest

Case 0
' nix tun
Case 1

Result(UBound(Result)) = 61
Result(UBound(Result) - 1) = 61
Case 2
'
Result(UBound(Result)) = 61
End Select

base64_encode = StrConv(Result, vbUnicode)

base64_encode_End:
Exit Function

base64_encode_Err:
ShowStatus ("Fehler: " & Err & " / " & Error$ & " / Function: base64_encode in Modul base64")
Form1.Label7.BackColor = vbRed
Resume base64_encode_End
End Function
Function ShowStatus(ByVal text$)
Form1.Label7.Caption = text
Form1.Label7.Refresh
End Function[/code]

vll. hab ich da auch einen Fehler beim einfügen gemacht. Kann mir vll. einer sagen, wie ich das einfügen muss?

//EDIT: Der bei der Seite, die du mir geschickt hast, ist das ja auch kein VB6..

Das mit dem Versenden geht jetzt.. aber nur eine Datei. Hab es dann so gemacht, dass die eine datei per Anhang versendet wird und die Textdatei als Emailtext, aber dann ist die email nur 1 kb groß... und dann ist die datei, welche ich als Anhang verschickt habe nicht dabei und von der Textdatei nur die erste Zeile... Wenn ich die Textdatei weglasse und als text nur hallo nehme und die Datei versende geht es komischerweiße... Mir kommt es so vor, als wäre die Mail dann zu groß [img]/ohmy.gif[/img]
 
bla
Coder
Coder

Anmeldedatum: 02.05.2008
Beiträge: 267


Verfasst am: 19.07.2008, 17:38

viellt hilft ja das... kA
http://www.vbarchiv.net/tipps/details.php?id=321
 
spidertimo
Newbie
Newbie

Anmeldedatum: 10.07.2008
Beiträge: 14


Verfasst am: 19.07.2008, 18:18


ne das ist mit Exel und Outlook [img]/sad.gif[/img]
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Fragen - Antworten

Tags: anhang, email, vb6

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Wie per Webbrowser Komponente einen Klick auf Bild machen? 362 15.10.2007, 16:25
Keine neuen Beiträge FTP Upload per shell 1709 29.09.2007, 18:23
Keine neuen Beiträge vb6 windows pfad per variable 390 22.09.2007, 20:43
Keine neuen Beiträge per vb6 etwas an ne mail senden? 485 31.07.2007, 20:29
Keine neuen Beiträge Per Shell --> Cmd 980 05.04.2007, 17:34
 


[ Time: 0.2056s ][ Queries: 92 (0.1183s) ][ GZIP on - Debug on ]