2013-10-09 173 views
1

我基本上使用Microsoft Visual Studio在C#中发送一个海量电子邮件发件人,它的想法是它使用真正的电子邮件帐户通过SMTP发送电子邮件,以便它们不被标记为垃圾邮件,但我保留得到的错误:URI格式不支持

URI formats are not supported. 

基本上下面的代码从我的网站检索电子邮件帐户列表,但引发上述错误。

String[] saUsernames = File.ReadAllLines(@"http://mywebsite.com/test/accounts.txt"); 

我试着加载文件在本地工作得很好,所以我无法弄清楚是什么问题,任何人有任何想法,我很好,真正困惑

编辑:继承人的全脚本别的东西可能会导致错误,我已经删除了一些链接到我的网站,如等在发展一个项目,我不想放弃许多线索

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Net; 
using System.Net.Mail; 
using System.Threading; 
using System.IO; 

namespace NecroBomber 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     int iTimeOutValue = 100; 
     int iSentAmount = 0; 
     SmtpClient client = new SmtpClient(); 
     MailMessage mail = new MailMessage(); 
     String[] saUsernames = File.ReadAllLines(@"http://example.com/accounts.txt"); 
     WebClient wcUpdates = new WebClient(); 
     string sMasterPassword = "testpassword"; 
     string sLastUsername = ""; 
     int iTimeOutWebRequest = 0; 

     private void btnClick(object sender, EventArgs e) 
     { 
      Button btnCurrent = ((Button)sender); 
      if (btnCurrent.Tag.ToString() == "SendMail") 
      { 
       prbSentStatus.Maximum = ((int)nudAmount.Value * saUsernames.Length); 
       Thread tStart = new Thread(SendMail); 
       tStart.Start(); 
      } 
      else if (btnCurrent.Tag.ToString() == "AddAccount") 
      { 
       AddNewAccount(); 
      } 
      else if (btnCurrent.Tag.ToString() == "Update") 
      { 
       try 
       { 
        if (wcUpdates.DownloadString(@"http://example.com/version.txt") != "1.0.0") 
        { 
         if (dlgSaveUpdate.ShowDialog() == DialogResult.OK) 
         { 
          wcUpdates.DownloadFile(@"http://example.com/new.exe", dlgSaveUpdate.FileName); 
         } 
        } 
        else 
        { 
         MessageBox.Show("Your version is up to date!", "Information!"); 
        } 
       } 
       catch 
       { 

       } 
      } 
     } 

     private void SendMail() 
     { 
      int iToSend = Convert.ToInt32(nudAmount.Value); 
      for (int i = 0; i < saUsernames.Length; i++) 
      { 
       GrabMailDetails(i); 
       client.Credentials = new NetworkCredential(saUsernames[i], sMasterPassword); 
       if (saUsernames[i] != sLastUsername) 
       { 
        if (saUsernames[i].EndsWith("@yahoo.com")) 
        { 
         client.Host = "smtp.mail.yahoo.com"; 
         client.Port = 587; 
         client.EnableSsl = false; 
        } 
        else if (saUsernames[i].EndsWith("@gmail.com")) 
        { 
         client.Host = "smtp.gmail.com"; 
         client.Port = 25; 
         client.EnableSsl = true; 
        } 
        else if (saUsernames[i].EndsWith("@hotmail.co.uk")) 
        { 
         client.Host = "smtp.live.com"; 
         client.Port = 587; 
         client.EnableSsl = true; 
        } 
        else if (saUsernames[i].EndsWith("@outlook.com")) 
        { 
         client.Host = "smtp.live.com"; 
         client.Port = 587; 
         client.EnableSsl = true; 
        } 
        else if (saUsernames[i].EndsWith("@hotmail.com")) 
        { 
         client.Host = "smtp.live.com"; 
         client.Port = 587; 
         client.EnableSsl = true; 
        } 
        else if (saUsernames[i].EndsWith("@aol.co.uk")) 
        { 
         client.Host = "smtp.aol.com"; 
         client.Port = 587; 
         client.EnableSsl = true; 
        } 
        else if (saUsernames[i].EndsWith("@aol.com")) 
        { 
         client.Host = "smtp.aol.com"; 
         client.Port = 587; 
         client.EnableSsl = true; 
        } 
       } 
       else 
       { 

       } 
       sLastUsername = saUsernames[i]; 

       for (int x = 0; x < iToSend; x++) 
       { 
        try 
        { 
         client.Send(mail); 
         iSentAmount++; 
        } 
        catch 
        { 
         MessageBox.Show("Maximum emails today sent from this SMTP server has been reached.\nAccount name: " + sLastUsername, "Error!"); 
         goto JMP; 
        } 
       } 
       JMP: ; 
      } 

     } 

     private void GrabMailDetails(int count) 
     { 
      try 
      { 
       mail = new MailMessage(); 
       mail.Body = tbBody.Text; 
       mail.Subject = tbSubject.Text; 
       mail.From = new MailAddress(saUsernames[count]); 
       mail.To.Add(tbTarget.Text); 
       { 
           } 
       if (rbHigh.Checked) 
       { 
        mail.Priority = MailPriority.High; 
       } 
       else if (rbLow.Checked) 
       { 
        mail.Priority = MailPriority.Low; 
       } 
       else if (rbNorm.Checked) 
       { 
        mail.Priority = MailPriority.Normal; 
       } 
      } 
      catch 
      { 

      } 
     } 

     private void AddNewAccount() 
     { 
      String[] saCurrentAccounts = File.ReadAllLines(@"Accounts.txt"); 
      string sAddNewAccount = ""; 
      for (int i = 0; i < saCurrentAccounts.Length; i++) 
      { 
       sAddNewAccount += saCurrentAccounts[i] + Environment.NewLine; 
      } 

     } 

     private void timeUpdate_Tick(object sender, EventArgs e) 
     { 
      prbSentStatus.Value = iSentAmount; 
      lblEmailSentCount.Text = "Emails Sent: " + iSentAmount; 
      iTimeOutWebRequest++; 
      if (iTimeOutWebRequest == iTimeOutValue) 
      { 

      } 
     } 


     private void Form1_Load(object sender, EventArgs e) 
     { 
      timeUpdate.Start(); 
      lblMultiple.Text = "x " + saUsernames.Length; 
      this.Text = "test - " + Environment.UserName; 
     } 

     private void pictureBox1_Click(object sender, EventArgs e) 
     { 

     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      if (wcUpdates.DownloadString(@"update.com/version") != "1.0.0") 
        { 
         if (dlgSaveUpdate.ShowDialog() == DialogResult.OK) 
         { 
          MessageBox.Show("Updating LulzBomber. Please wait a few minutes", "Information!"); 
          wcUpdates.DownloadFile(@"update.com/version", dlgSaveUpdate.FileName); 
         } 
        } 
        else 
        { 
         MessageBox.Show("Your version is up to date!", "Information!"); 
        } 
      } 

     private void button3_Click(object sender, EventArgs e) 
     { 
      MessageBox.Show("Created by ***", "About"); 
     } 

     } 
    } 
+0

随着越来越多的崇高目标这样的示例代码,显示这个问题可能是OK:Web客户端也可以从磁盘,如果参照这样引用本地文件。用你的一个,你最好展示适当的努力制作一个好的样本 - 请查看http://sscce.org/来改进你的问题。 –

+0

错误信息对我来说似乎非常清晰简洁;您不能将URI路径与'File'类一起使用。你需要使用'WebClient'。 –

回答

-1

File.ReadAllLines不支持如错误消息中所述的直接URI路径(虽然令人费解它如何在本地工作),只需将您的路径分配给一个字符串,然后在请求中使用它。

string path = @"http://mywebsite.com/test/accounts.txt"; 
String[] saUsernames = File.ReadAllLines(path); 

编辑:由于没有字符可以在字符串中转义并只使用原始行,因此可以将@弃置。

+1

您的建议不起作用。 –

+1

是的,给出了与op相同的错误 – RichardB

0

File.ReadAllLines不支持http模式,如http。

尝试,而不是:

string content; 
using (WebClient client = new WebClient()) 
{ 
    content = client.DownloadString("http://example.com/accounts.txt"); 
} 

'内容' 将包含文件的完整内容。使用string.Split()函数将内容拆分为数组很简单。

注:

@"file://c:\folder\account.txt"