none
SendMail-Problem? RRS feed

  • Frage

  • Hallo,

    da mich SPAM-Mails die mich trotz Spamfilter unheimlich ärgern, habe ich ein kleines Programm geschrieben, bei dem ich dem Absender eine beliebiege Anzahl Mails schicke. Die Mail hat immer einen unterschiedlichen Betreff und immer den gleichen Text.
    Beim Testen ist mir aufgefallen, dass nicht die korrekte Zahl von Mails verschickt wird. Gebe ich nur 2 oder 3 Mails an, stimmt mein Egebnis. Gehe ich aber z.B. hoch auf 20, bekomme ich 4 oder 5 Mails. Selbst utopische Werte von 1000 000 bringen im Ergebnis 9 Mails an meine Adresse.

    Nachdem das Programm grundsätzlich mehrere Mails mit stets unterschiedliche Betreffs verschicht und ich den TimeOut auch schon auf 20 Minuten gesetzt habe, kommen mir Zweifel, ob das Programm, so wie es momentan läuft, überhaupt in der Lage ist, die angegebene Menge Mails in der Zeit, in der diese "losgeschickt" werden grundsätzlich verschickt werden können.

    Hier mein Code:

     Try
                Me.Button1.ForeColor = Color.Yellow
                Me.Button1.Text = "Versand läuft..."
                Me.Button1.BackColor = Color.ForestGreen
                Me.Button1.Enabled = False
    
                'MsgBox("Erzeuge " & TextBox2.Text & " MAils")
                Dim x As Integer
                Dim Y As String = Me.TextBox2.Text        'Anzahl der Mails wird um 1 höher angegeben damit am schluß die Anzahl stimmt
    
                For x = 0 To Y.Count + 1                      'Fügt jeden einzelnen Eintrag der ListBox der Mail hinzu bis der Index -1 ist
    
                    'Erzeuge Zufallszahl für den Betreff
                    Dim Wert1
                    Randomize()
                    Wert1 = Int((10000000 * Rnd()) + 1)   ' Ganze Zufallszahl im Bereich von 1 bis 49 erzeugen.
    
                    'Inhalt der Mail
                    Dim Betreff As String = Wert1 'Zufallszahl
    
                    'MsgBox("Betreff: " & Me.TextBox2.Text)
                    Dim SendFrom As String = Me.TextBox1.Text 'Form12.TextBox1.Text   'Holt sich Mail-Adresse auf Form 12
    
                    'MsgBox("Absender: " & Form12.TextBox1.Text)
                    Dim ShipTo As String = Me.TextBox1.Text
    
                    'MsgBox("Empfänger: " & Me.TextBox1.Text)
                    Dim Text As String = RichTextBox1.Text
    
                    'SMTP-Client erhält Serverdaten
                    Dim myClient As New Net.Mail.SmtpClient(Form12.TextBox2.Text) ''Dim myClient As NewNet.Mail.SmtpClient("smtp.web.de")
                    myClient.Timeout = TimeOutValue * 60 * 1000 ' Erster Wert(Minuten wird bei Mail-Einstellungen festgelegt) * 60 * 1 Sekunde (1000 ms)
                    myClient.Credentials = New NetworkCredential(Form12.TextBox1.Text, Form12.TextBox3.Text) 'myClient.Credentials = New NetworkCredential("name@domain.de", "Passwort")
                    'Nachricht wird zusammengebaut
                    Text = RichTextBox1.Text            'Inhalt der Nachricht entspricht RichTextBox1
                    Dim mail As New System.Net.Mail.MailMessage     'Klasse? mail wird erzeugt
                    mail.From = New System.Net.Mail.MailAddress(SendFrom)   'Absender wird angegeben
                    mail.To.Add(ShipTo)                                     'Empfänger wird angegeben
                    mail.Subject = Betreff                                'Betreff wird angegeben
                    Form12.TextBox1.Text = SendFrom
                    mail.Body = Text
    
                    'Timeout wird  erst kurz vor dem Versenden festgelegt 
                    If TimeOutValue = 0 Then
                        TimeOutValue = 100  'Falls irgendein Fehler den Wert 0 provoziert, wird der  Wert hier auf 100 korrigiert
                    Else
                        TimeOutValue = TimeOutValue 'Ansonsten gilt der ermittelte Wert
                    End If
                    myClient.Send(mail)
                Next
                
    
                Me.Button1.Text = "Senden"
                Me.Button1.Enabled = True
                Me.Button1.BackColor = Form2.Button20.BackColor
                Me.Button1.ForeColor = Color.Black
                MsgBox("Es ist vollbracht.")
    
            Catch ex As Exception
    

    Gibt es eine Möglichkeit, zu prüfen, ob die Mail verschickt wurde damit die nächste erst erzeugt wird, wenn sichergestellt ist, dass sie auch versendet werden kann?

    Oder ist sonst irgendwas falsch in meiner For Next Anweisung?

     

     

     


    Liebe Grüße Stefan
    Donnerstag, 1. April 2010 21:27

Antworten

  • Hallo Stefan,

    an Deiner For Next Anweisung ist etwas gewaltig falsch:

    Dim Y As String = Me.TextBox2.Text        
    
    For x = 0 To Y.Count + 1   

    Die Count Methode für den Datentyp String gibt hier schlicht die Anzahl der Zeichen zurück. Darum auch die konstant niedrigen Werte. Besser Du arbeitest gleich mit einem Integer:

    Dim Y As Integer
    
    If Not Integer.TryParse(Me.TextBox2.Text, Y) Then
      MsgBox("Ausdruck ist keine gültige Zahl!")
      Return
    End If
    
    For x = 0 To Y + 1   

     

    Aber : Spam mit irgendwelchen Mail Attacken "bekämpfen" zu wollen, würde ich als ziemlich sinnloses Unterfangen betrachten. Du lieferst dem Versender damit nur die Bestätigung, dass die E-Mail Adresse gültig ist. Damit ist sie für ihn umso wertvoller, wenn er selber denn mit einer echten, mit seiner Adresse sendet. Im Zweifel wandert Deine Adresse oder gleich der ganze Mailserver des Anbieters auf diversen Blacklists, so dass andere Server keine Mails mehr von diesem akzeptieren, weil diese annehmen dieser sei eine Spam Schleuder. Ferner könntest Du Dich mit so einer Aktion auf rechtlich dünnem Eis bewegen. Insbesondere, wenn Du für Deine Aktion die Infrastruktur eines FreeMail Anbieters, wie Web.de "missbrauchst". Ich denke jedenfalls nicht, dass er in seinen AGB die Versendung von "Massenmail" erlaubt.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Donnerstag, 1. April 2010 22:12

Alle Antworten

  • Hallo Stefan,

    an Deiner For Next Anweisung ist etwas gewaltig falsch:

    Dim Y As String = Me.TextBox2.Text        
    
    For x = 0 To Y.Count + 1   

    Die Count Methode für den Datentyp String gibt hier schlicht die Anzahl der Zeichen zurück. Darum auch die konstant niedrigen Werte. Besser Du arbeitest gleich mit einem Integer:

    Dim Y As Integer
    
    If Not Integer.TryParse(Me.TextBox2.Text, Y) Then
      MsgBox("Ausdruck ist keine gültige Zahl!")
      Return
    End If
    
    For x = 0 To Y + 1   

     

    Aber : Spam mit irgendwelchen Mail Attacken "bekämpfen" zu wollen, würde ich als ziemlich sinnloses Unterfangen betrachten. Du lieferst dem Versender damit nur die Bestätigung, dass die E-Mail Adresse gültig ist. Damit ist sie für ihn umso wertvoller, wenn er selber denn mit einer echten, mit seiner Adresse sendet. Im Zweifel wandert Deine Adresse oder gleich der ganze Mailserver des Anbieters auf diversen Blacklists, so dass andere Server keine Mails mehr von diesem akzeptieren, weil diese annehmen dieser sei eine Spam Schleuder. Ferner könntest Du Dich mit so einer Aktion auf rechtlich dünnem Eis bewegen. Insbesondere, wenn Du für Deine Aktion die Infrastruktur eines FreeMail Anbieters, wie Web.de "missbrauchst". Ich denke jedenfalls nicht, dass er in seinen AGB die Versendung von "Massenmail" erlaubt.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Donnerstag, 1. April 2010 22:12
  • Hallo Thorsten,

    ich muss zugeben, dass ich selbst meine Bedekenken habe. Daher wird es das Programm auch nicht bei Freunden und Bekannten geben. Meine Mails versende ich nicht über einen FreeMail-Anbieter und als Absender übernimmt mein Programm die Adresse des Empängers. Ein Spammer bekommt quasi von sich selbst SPAMS ;-)

    Illegal? Na bin ich nun der Giftzwockel oder nicht?

    Grundsätzlich ist es doch so, dass der Absender eine SPAM was unerlaubtes tut. Ich denke nicht, dass der, wenn er überhaupt in Deutschland sitzt eine Anzeige erstattet weil man ihm auf seine nachweisbare illegale SPAM-Mail eine Vielzahl Antworten geschickt hat.
    Theoretisch könnte ich ja auch manuell 10 x die gleiche Mail verschicken.

    Bleiben zwei Punkte, 1. wenn ich auf die Adresse antworte und 10 Mails schicke, bekomme ich selbst aller Wahrscheinlichkeit nach 25 Mail Delivery Mitteilungen. Daher werde ich das Programm nur da einsetzen wo es um "seriöse" Firmen geht und deren Homepage besuchen um dort die offizielle Mail-Adresse herauszufinden.

    Das ist zugegeben viel Mühe. Täglich aus einer Vielzahl von Mails im SPAM-Filter die rauszusuchen, die dort versehentlich hingeraten sind aber auch.

    Vielleicht war das aber auch nur so ein Programm, das man schreibt, um sich abzuregen ähnlich wie ein Brief, den man später durch den Aktenvernichter jagt.

    Viel wichtiger ist, dass ich die Methode:

    If Not Integer.TryParse(Me.TextBox2.Text, Y) Then
      MsgBox("Ausdruck ist keine gültige Zahl!")
      Return
    End If

    auf diesem Weg kennengerlent habe und dafür hat sich der Aufwand schon jetzt gelohnt.

     


    Liebe Grüße Stefan
    Freitag, 2. April 2010 22:51
  • Hallo Stefan,

    es freut mich, dass ich Dir weiterhelfen konnte.

    Noch eine Anmerkung zu Deiner Aussage "Grundsätzlich ist es doch so, dass der Absender eine SPAM was unerlaubtes tut.":

    Wenn Du das so siehst, kannst Du das bei den Behörden zur Anzeige bringen und dann nimmt das ganze seinen Lauf. Wobei der Ausgang absehbar sein dürfte, insbesondere wenn der Anbieter nicht in Deutschland sitzt. Wenn Du das jedoch selber regeln möchtest, nennt sich das Selbstjustiz und diese ist als solches schon eine strafbare Handlung.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Samstag, 3. April 2010 07:54
  • Hallo Stefan,

    ich muß Thorsten zustimmen: SPAM mit SPAM bekämpfen ist keine gute Idee.

    Und in 99,9999% der Fälle wirst Du ohnehin nicht den Verursacher des SPAMs treffen.
    Denn die nutzen die Rechner anderer Leute dafür und deren EMail-Adressen oder
    vollkommen frei erfundene, siehe Wikipedia Botnet

    Und am Ende trifft Dich der Versand Deines SPAMs (denn das sind solche Revanche-EMails)
    wesentlich mehr, da man Deine EMail Adresse als SPAM-Versandadresse aussortiert und
    sie auf den Blacklist s landet.
    Womit die regulären EMails nicht mehr ankommen werden, weil sie ebenfalls abgewiesen werden.

    Das einzig sinnvolle: Ignoriere sie!
    Und pflege eine Liste der Empfänger von denen Du EMail erwartest (Whitelist)
    und behandle diese vorrangig.  Denn i. a. ist das eine überschaubare Anzahl
    von Adressen.

    Gruß Elmar

     

    Samstag, 3. April 2010 08:12
  • Hallo Thorsten,

    ihr habt ja Recht. Danke, dass ihr mich auf den Boden der Tatsachen zurück holt.
    Aber sind wir mal ehrlich, Anzeigen bringt auch nichts - schreibtst du ja selber -  das ist genauso wie das Telefonieren mit dem Handy im Auto ohne Freisprecheinrichtung.

    Erlaubt ist es nicht, dennoch machen es fast alle. Wird man erwischt, wird noch über die Polizei gemeckert, die nichts anderes zu tun hat als Handytelefonierern nachzustellen anstatt echte Verbrecher zu jagen. Aber bevor wir hier die Welt retten widtme ich mich lieder wieder den "Hello World"-Projekten.
    Grundsätzlich habe ich  mich ja bereits beim Schreiben des Programms abreagiert und was gelernt.

    Also hat VB Net auch seinen thearpeutischen Nutzen erfüllt.


    Liebe Grüße Stefan
    Samstag, 3. April 2010 13:26
  • Hallo Elmar,

    Das einzig sinnvolle: Ignoriere sie!
    Und pflege eine Liste der Empfänger von denen Du EMail erwartest (Whitelist)
    und behandle diese vorrangig.  Denn i. a. ist das eine überschaubare Anzahl
    von Adressen.

    So mache ich das bislang und ihr habt micht überzeugt. Dennoch war der Gadanke an sich schon mal wohtuend.
    Wie oben geschrieben, der Nickname Giftzwockel kommt ja nicht von ungefähr ;-)


    Liebe Grüße Stefan
    Samstag, 3. April 2010 13:30