Forum
Kardeş,
ilk önce vt den bütün kullanıcıların mail adreslerini bir dataset in içine çekiyorsun (datagridwiev gibi). sonra bu dataseti kayıt sayısı kadar döngüye sokup mail komutları yerleştirdin mi işin hallolur.
Örnek olarak.
string memSQL = "SELECT KullaniciMail FROM tablo";
SqlCommand cmdGetir = new SqlCommand(memSQL, baglanti);
SqlDataAdapter da = new SqlDataAdapter(cmdGetir);
DataSet ds = new DataSet();
try
{
ds.Tables["mailadres"].Clear();
}
catch { }
for (int i = 0; i < ds.Tables["mailadres"].Rows.Count; i++)
{
try
{
MailMessage EPosta = new MailMessage();
EPosta.From = new MailAddress("txtKimden.Text");
EPosta.To.Add(ds.Tables["mailadres"].Rows[i]["KolonAdi"].ToString());
EPosta.Subject = "txtKonu.Text";
EPosta.Body = "txtMesaj.Text";
SmtpClient SunucuAyar = new SmtpClient("smtp.gmail.com");
SunucuAyar.Port = 587;
SunucuAyar.Credentials = new System.Net.NetworkCredential("k.adi", "şifre");
SunucuAyar.EnableSsl = true;
SunucuAyar.Send(EPosta);
}
catch
{
MessageBox.Show("HATA" + i.ToString() + " mail gönderilemedi!");
}
}
Sağolasın kardeş gönderme işlemini yaptım. buna progress bar ekledim ama istediğimi gibi olmadı istediğimse şöyle tabloda 7 tane mail adresi varsa her gönderdiği mail için onun yüzdesi kadar progress bar ilerlesin 7 tanesinide gönderdiğinde progress bar tamamiyle dolsun ama benim yaptığımda her gödnerdiği bir mail için doluyor sonra göndericeği diğer mail için bir daha doluyor. bunada bir bakabilirmisin??
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.Data.SqlClient;
using System.Net.Mail;
using System.Collections;
namespace mail
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SqlConnection SqlConn = new SqlConnection(@"Server= .; Database= vt; User Id= K.Adı; Password= parola;");
SqlDataAdapter SqlDa;
string MailAdresi;
private void Form1_Load(object sender, EventArgs e)
{
if (SqlConn.State == ConnectionState.Closed)
{
SqlConn.Open();
}
else
{
SqlConn.Close();
SqlConn.Open();
}
}
private void btnGonder_Click(object sender, EventArgs e)
{
if (txtKimden.Text == "")
{
MessageBox.Show("Mail Alanı Boş Bırakılamaz", "İşlem Uyarısı", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else if (txtKonu.Text == "")
{
MessageBox.Show("Konu Alanı Boş Bırakılamaz", "İşlem Uyarısı", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else if (txtMesaj.Text == "")
{
MessageBox.Show("Mesaj Alanı Boş Bırakılamaz", "İşlem Uyarısı", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
try
{
SqlDa = new SqlDataAdapter("SELECT Mail FROM Kullanici", SqlConn);
DataTable SqlDt = new DataTable();
SqlDa.Fill(SqlDt);
progressBar1.Minimum = 0;
progressBar1.Maximum = 100;
foreach (DataRow row in SqlDt.Rows)
{
MailAdresi = (row["Mail"].ToString());
MailMessage EPosta = new MailMessage();
EPosta.From = new MailAddress(txtKimden.Text);
EPosta.To.Add(MailAdresi);
EPosta.Subject = "Car Dealer - " + txtKonu.Text;
EPosta.Body = "İsim : " + txtisim.Text + Environment.NewLine + "E-Posta : " + txtKimden.Text + Environment.NewLine + Environment.NewLine + "Mesaj : " + Environment.NewLine + txtMesaj.Text;
SmtpClient SunucuAyar = new SmtpClient("smtp.gmail.com");
SunucuAyar.Port = 587;
SunucuAyar.Credentials = new System.Net.NetworkCredential("K.Adı", "Parola");
SunucuAyar.EnableSsl = true;
//MessageBox.Show(progressBar1.Maximum.ToString());
for (double i = progressBar1.Minimum; i <= 100; i += (progressBar1.Maximum / SqlDt.Rows.Count))
{
if (i == 99)
{ progressBar1.Value = Convert.ToInt32(i) + 1; }
else {progressBar1.Value = Convert.ToInt32(i); }
SunucuAyar.Send(EPosta);
}
}
MessageBox.Show("Mesajınız Gönderildi.", "İşlem Başarılı", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch(SqlException hataMail)
{
MessageBox.Show(hataMail.ToString());
//MessageBox.Show("Mesajınız Gönderilmedi.", "İşlem Başarısız", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
}
kardeşim progress bar için yaptığın for döngüsünü foeach döngüsünün başına alman gerekir.
sen her adımda progress bar bir miktar ilerlesin istediğin için iç içe iki for döngüsü kullanarak yapman gerekir. ilk for progress bar için. onun içine yazacağın kayıt sayısı kadar mail göndermen için.
her mail gönderdiğinde progress bar ın for döngüsünü mesela 10 artır adım adım ilerlemiş olur.