Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET

Автор: avkorets
Дата сообщения: 25.03.2009 12:30
Все задолбался вконец...
Ребят есть мысли у кого по отправке почты?
банально создал форму с одной кнопкой "отправить"...
И все равно отправляет только после закрытия формы...(я описывал выше проблему)

Код:
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.Mail;

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

private void button1_Click(object sender, EventArgs e)
{
string sSubj = "тест";
string sTo = "kva@gggg.ru";
string sFrom = "ggg@gggg.ru";
string sServer = "gggggg";
string sBody = @"тест";
MailMessage mmMailMessage = new MailMessage();
SmtpClient smtpC = new SmtpClient(sServer, 25);
mmMailMessage.SubjectEncoding = System.Text.Encoding.UTF8;
mmMailMessage.BodyEncoding = System.Text.Encoding.UTF8;
smtpC.UseDefaultCredentials = false;
smtpC.Send(sFrom, sTo, sSubj, sBody);
mmMailMessage.Dispose();
}
}
}
Автор: bbEye
Дата сообщения: 25.03.2009 13:14
avkorets
навскидку - зачем создавать MailMessage, если он не используется?

Попробовал этот код - вывалило ошибку в методе SmtpClient.Send

Написал свой, работает:

Код:
private void button1_Click(object sender, EventArgs e)
{
SmtpClient sc = new SmtpClient("адрес smtp-сервера");
sc.UseDefaultCredentials = false;
// мой локальный smtp-сервер требует аутентификации
sc.Credentials = new NetworkCredential("username", "password");

MailAddress from = new MailAddress("from@mail.ru", "Иван Иванов", System.Text.Encoding.UTF8);
MailAddress to = new MailAddress("to@mail.ru", "Петр Петров", Encoding.UTF8);
using (MailMessage message = new MailMessage(from, to))
{
message.Body = "Тест. Никакого смысла не несет.";
message.BodyEncoding = System.Text.Encoding.UTF8;
message.Subject = "Тест. Просто тест.";
message.SubjectEncoding = System.Text.Encoding.UTF8;

sc.Send(message);
}
}
Автор: avkorets
Дата сообщения: 25.03.2009 13:55

Цитата:
Если сообщение реально уходит, только когда приложение закрывается, то это похоже на косяк SMTP-сервера.
Посмотри внутрь SmtpClient'а - он запрашивает физическое соединение, отправляет письмо, а затем возвращает соединение в пул. Может случиться, что smtp-сервер не отправит письма до тех пор, пока физическое соединение от клиента не закроется, а оно - висит в пуле.

Скорее так он и есть...
А как побороть этот косяк?
Нужно править что-то на Smtp сервере или можно что-то в коде сделать?
в любом случае спасибо за ответ...
вощем достал логи с смтп сервака..
нажимаю кнопку отправить

Код:
2009-03-25 11:10:25 10.4.11.228 ws893 SMTPSVC1 SRVEXPROXY01 10.1.35.61 0 EHLO - +ws893 250 0 309 10 0 SMTP - - - -
2009-03-25 11:10:25 10.4.11.228 ws893 SMTPSVC1 SRVEXPROXY01 10.1.35.61 0 MAIL - +FROM:<so@gg.ru> 250 0 39 26 0 SMTP - - - -
2009-03-25 11:10:25 10.4.11.228 ws893 SMTPSVC1 SRVEXPROXY01 10.1.35.61 0 RCPT - +TO:<s@gg.ru> 250 0 31 28 0 SMTP - - - -
Автор: bbEye
Дата сообщения: 25.03.2009 15:10

Цитата:
все ждет data
закрываю приложение
Приложение ЗАНОВО отправляет!

Шайтанство!
Сервер же возвращает статус 250, непонятно, почему следующая команда не посылается...
В-общем, рекомендую попробовать какой-нибудь другой класс для отправки писем.
Или, если надо сделать срочно, и чтоб работало, написать консольное приложение, которое будет отправлять пачку писем и завершать работу (чтобы письма отправились), плюс батничек, который это приложение будет в цикле рестартовать
Автор: avkorets
Дата сообщения: 25.03.2009 16:38
bbEye
Спасибо!

Цитата:
другой класс для отправки писем

Посоветуй..Попробую.

Цитата:
консольное приложение, которое будет отправлять пачку писем

не подходит нужно в реальном времени..у меня на появлении файла срабатывает и в момент появления нужно посылать уведомление типа я появился =)

Кстати вполне вероятно что хост...Оказывается наши ящики были перемещены на новый хост,попытаюсь выяснить подробности...
Раньше отправка проходила норм как и должно быть.

Автор: bbEye
Дата сообщения: 25.03.2009 17:15
avkorets
Навскидку не могу посоветовать. Их много всяких, надо пробовать...

У меня прога, которая отправляет почту, написана еще на дельфи. Да и то, чтобы не зависеть от глюков и тормозов разных smtp-серверов, я ставлю свой локальный сервер, с которым прога работает стопудово, а в нем настраиваю перенаправление почты уже на smtp-сервер провайдера.
Автор: AlexandrVS
Дата сообщения: 26.03.2009 11:55
BlackVetal Сервер мне не к чему таскать, у меня базы на access-e.

BaluBig Ну ты как всегда прав , я именно таким путем и пошел, единственное данные пока гружу в датасет а потом из него заполняю все дочерние узлы при обращении, его удобно использовать для быстрой фильтрации rowfilter, поиск работает быстро, но при первой загрузке приходится ждать, у меня сейчас в базе 200 000 записей в dataset грузятся 15 секунд потом 2сек в сам компонент и все летает, больше тормозов нет, но первая загрузка напрягает, можно конечно использовать datareader, но тогда фильтрацию придется делать самому, как лучше сделать в этом случае, чем можно быстро отфильтровывать значения IList?

Автор: avkorets
Дата сообщения: 26.03.2009 15:26
bbEye
ну хоть за это спасибо=)
Нашел консольную утилиту которая норм отправляет из смд прикручу к коду программы =)
кстать а как скрыть окно смд при запуске сторонней утилиты из тела кода?
запускаю System.Diagnostics.Process.Start
Вот еще возник вопрос как вырезать кусок из файла?
Нахожу строку..Начиная с нее пишу в файл до момента пока не найду другую строку..
тобишь получается пишу в файл со строки которую нашел по совпадению до строки которую так же нашел но по другому совпадению =)
Чот не пойму как это сделать...
Автор: V0lt
Дата сообщения: 26.03.2009 18:10
avkorets

Цитата:
кстать а как скрыть окно смд при запуске сторонней утилиты из тела кода?

Что-то типа этого

Код: using (Process myproc = new Process())
{
myproc.StartInfo.FileName = path;
myproc.StartInfo.Arguments = arguments;

myproc.StartInfo.UseShellExecute = false;
myproc.StartInfo.RedirectStandardInput = true;
myproc.StartInfo.RedirectStandardOutput = true;
myproc.StartInfo.RedirectStandardError = true;
myproc.StartInfo.CreateNoWindow = true;

myproc.Start();

myproc.WaitForExit();
}
Автор: Skyer1
Дата сообщения: 27.03.2009 00:35
Здравствуйте!
Помогите с решением задачи только начинаю программировать на шарпе дали задание

Создать класс студент (виртуальный) метод
создать случайным образом коллекцию из 20 студентов.
Вывести на консоль распределение оценок и % списывавших.

Вроде должно выглядеть так:

Код:
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int a = 0;
St1[] arr = new St1[10];
arr[0] = new St1();
System.Console.WriteLine("{0} ocenka - {1} spisal - {2}%", arr[0].name, arr[0].Examen(ref a, arr[0].t), a);
System.Console.Read();
}
}
class Student
{
public int Examen(ref int a, int t)
{
Random r = new Random();
a = r.Next(t) + 1;
return r.Next(5) + 1;
}
}
class St1 : Student
{
public string name = "Student 1";
public int t = 10;
}
class St2 : Student
{
public string name = "Student 2";
public int t = 30;
}
class St3 : Student
{
public string name = "Student 3";
public int t = 50;
}
class St4 : Student
{
public string name = "Student 4";
public int t = 70;
}
class St5 : Student
{
public string name = "Student 5";
public int t = 100;
}
}


Автор: Omicron_Persey_8
Дата сообщения: 27.03.2009 10:14
Skyer1
Ну давай будем разбираться:

Код:
namespace Student
{
class Program
{
static void Main(string[] args)
{
// Делаем список студентов
List<Student> students = new List<Student>();
students.Add(new Student("Иванов", 5));
students.Add(new Student("Петров", 4));
students.Add(new Student("Сидоров", 3));
students.Add(new Student("Егоров", 4));
// и выводим его на консоль
foreach (Student item in students)
{
Console.WriteLine(item);
}
Console.ReadKey();
}
}

// Создаем класс студента
public class Student
{
private string name; // Его имя
private int mark; // Оценка
// что имелось в виду под количеством списывающих - хз

public Student(string name,int mark) // Делаем конструктор, который рожает нам студента из имени и оценки
{
this.name = name;
this.mark = mark;
// тут хорошо бы сделать проверки, чтобы оценки были от 1 до 5 и целые, а не 3,5 балла
}

public override string ToString() // Пробуем сделать красиво: этот метод возвращает строковое описание объекта
{
return string.Format("{0} ocenka - {1}", this.name, this.mark);
}
}
}
Автор: Skyer1
Дата сообщения: 27.03.2009 13:50
Мой вариант рабочий если его запустить будет видно как должно выводить, у меня проблема только в одном случайно генерируется только один студент остальные просто не отображаются
Под процентом списавших имеется ввиду, сколько студентов списывало на экзамене(выводит случайно) Т.е нам не важно их имена в моей программе два массива один студенты другой под оценки и процент списывавших
Автор: avkorets
Дата сообщения: 27.03.2009 14:00
ребят подскажите

dateTimePicker1.Value.Month.ToString()
dateTimePicker1.Value.Day.ToString()

как исправить чтоб месяц и день выдал в формате ММ и ДД а не М и Д???
ну соответсвенно и год =)
Автор: Omicron_Persey_8
Дата сообщения: 27.03.2009 14:23

Цитата:
у меня проблема только в одном случайно генерируется только один студент остальные просто не отображаются

А зачем делать пять классов для студентов???
У вас есть массив, состоящий из элементов типа st1 и заполнен только один элемент arr[0]. И на фига нужны классы St2, St3 ... ???

avkorets
dateTimePicker1.Day.ToString("D2"));
dateTimePicker1.Month.ToString("D2"));
где D - десятичный формат, 2 - количество позиций под число
Автор: Skyer1
Дата сообщения: 27.03.2009 20:24

Цитата:
А зачем делать пять классов для студентов???
У вас есть массив, состоящий из элементов типа st1 и заполнен только один элемент arr[0]. И на фига нужны классы St2, St3 ... ???


А может я перепутал но вроде нам говорили, что нужно создать было 5 производных классов
Автор: Disperados
Дата сообщения: 28.03.2009 07:19
Приветствую!
На форуме Дундас нарыл интересное решение, а самому разобраться никак не получается.
Надо масштабирование по оси Х на графике перевести из Double в DateTime
Исходники переделал под MS Chart Control.
Надеюсь на помощь!
файло http://www.onlinedisk.ru/file/109691/

Помощь не потребовалась, сам нашел в чем был косяк.
Автор: Omicron_Persey_8
Дата сообщения: 28.03.2009 07:35
Skyer1
Ну если так, то тогда делай массив не St1, а Student:

Код:
Student[] arr=new Student[10];
arr[0]=new St1();
arr[1]=new St2();
Автор: Skyer1
Дата сообщения: 28.03.2009 09:17
Нет не хочет работать хотя поидее в моем варианте должно выводить этож вроде производные классы они должны наследоваться
Автор: feor
Дата сообщения: 28.03.2009 09:51
Skyer1
Может я не совсем понимаю задачу (особенно про отдельный класс для каждого инстанса студента), но по-моему, name нужно обернуть в виртуальное проперти и метод Examen тоже сделать виртуальным.
Автор: Lazy KoT
Дата сообщения: 28.03.2009 12:02
feor
Незачем их виртуальными делать...

И незачам делать 5 классов, одного предостаточно.
Автор: LuckyStrike
Дата сообщения: 28.03.2009 18:54
Парни помогите наптсать код по изменению на комплексно-сопряжённое число

Добавлено:
Дано число a (1 < a &#8804; 1,5). Из чисел 1+1/2, 1+1/3..... вывести те, которые не меньше a.
Автор: Omicron_Persey_8
Дата сообщения: 29.03.2009 11:47
Skyer1

Цитата:
Нет не хочет работать

Что именно не хочет работать?

LuckyStrike
Skyer1
Описывайте задачу подробнее, а то ни фига не понятно.

Автор: LuckyStrike
Дата сообщения: 29.03.2009 15:35
Решить задачу на обработку последовательности
Дано число a (1 < a <=1,5). Из чисел 1+1/2, 1+1/3..... вывести те, которые не меньше a.
Автор: Omicron_Persey_8
Дата сообщения: 29.03.2009 18:36
LuckyStrike
Ну вот как-то так:

Код:
static void Main(string[] args)
{
double a;
int i = 2;
Console.Write("a=");
double.TryParse(Console.ReadLine(), out a);
if((a > 1) || (a <= 1.5))
while ((1.0 + 1.0 / i) >= a)
{
Console.WriteLine("1 + 1/{0}", i);
i++;
}
Console.ReadLine();
}
Автор: Skyer1
Дата сообщения: 29.03.2009 23:38
Создать класс студент (виртуальный) метод PassExam() возвращает оценку и 5 наследников, каждый со своей реализацией. создать случайным образом коллекцию из 20 студентов.
Вывести на консоль распределение оценок и % списывавши.
Да и еще вроде нам говорили про, что нужно будет создать виртуальный метод
Автор: avkorets
Дата сообщения: 30.03.2009 15:22
Ребят простите за ламерские вопросы =)
Есть две формы.
майн

Код:
namespace FileModifier
{
public partial class MainForm : Form
{
Form2 frm2;
public MainForm()
{
InitializeComponent();
frm2 = new Form2(this);
}
... //вызываю форму 2
private void button1_Click(object sender, EventArgs e)
{
this.Enabled = false;
frm2.Show();
}
Автор: Lazy KoT
Дата сообщения: 30.03.2009 17:39

Цитата:
Так вот как мне dateTimePicker передать в Майн Форм?
В данном случае присвоить
dateTimePicker-у из MainForm (соответственно его добавить public-ом) dateTimePicker из From2. Ну а если по-человечески, то в Form2 передавать структуру данных, которую необходимо заполнить, а не целиком MainForm. Хотя, может это дело вкуса...

Цитата:
И еще как мне отловить в майнформ , что была нажата кнопка btn1 ф форме2 а не какая либо другая из формы2?
Подписаться на событие в MainForm, для чего придется btn1 сделать public, или же создать своё событие.
Автор: avkorets
Дата сообщения: 30.03.2009 19:52
Lazy KoT
ога спасиб с переносом разобрался...
про кнопку ога понял =)
еще маленький вопросик...
ищу файлы

Код:
void LoadFiles(string Dir4FindFiles)
{

foreach (string dir in Directory.GetDirectories(Dir4FindFiles))
{
if (dir == Dir4FindFiles + "\\ARCH") return;
{
foreach (string file in Directory.GetFiles(dir))
{
ListViewItem i = new ListViewItem(new string[] {...
                    });
listView1.Items.Add(i);
}
}
try
{
LoadFiles(dir);
}
catch
{ }
}
Автор: Lazy KoT
Дата сообщения: 30.03.2009 22:00
avkorets
Посмотри Directory.GetFiles(String, String, SearchOption)
Автор: avkorets
Дата сообщения: 31.03.2009 01:04
Lazy KoT
немного не то либо я не понял =)
просто не могу понять как поймать полный путь к нужной мне папке зная тока что на конце пути ток \\ARCH\\YYYY-MM\\DD ....
то есть даж не так есть же еще начало пути а вот середину откуда достать...
вот и нужно чтоб он искал пути с именем \\ARCH потом в этих найденны искал \\YYYY-MM и потом \\DD и во всех оставшихся \\DD искал файлы(ну это я могу=) )...
не могу понять почему
if (dir != Dir4FindFiles + "\\ARCH") return;
не отрабатывает...

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102

Предыдущая тема: Как удалить/добавить/отключить/включить устройство?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.