Mam aplikację C #, która wysyła e-mailem raporty z arkuszy kalkulacyjnych programu Excel za pośrednictwem serwera Exchange 2007 przy użyciu protokołu SMTP. Są one w porządku dla użytkowników Outlooka, ale dla użytkowników Thunderbirda i Blackberry nazwy załączników zostały zmienione na „Część 1.2”.
Znalazłem ten artykuł, w którym opisano problem, ale nie wydaje mi się, aby go obejść. Nie mam kontroli nad serwerem Exchange, więc nie mogę tam wprowadzać zmian. Czy jest coś, co mogę zrobić po stronie C #? Próbowałem użyć krótkich nazw plików i kodowania HTML dla treści, ale żaden z nich nie zrobił różnicy.
Mój kod wysyłania poczty jest po prostu taki:
public static void SendMail(string recipient, string subject, string body, string attachmentFilename)
{
SmtpClient smtpClient = new SmtpClient();
NetworkCredential basicCredential = new NetworkCredential(MailConst.Username, MailConst.Password);
MailMessage message = new MailMessage();
MailAddress fromAddress = new MailAddress(MailConst.Username);
// setup up the host, increase the timeout to 5 minutes
smtpClient.Host = MailConst.SmtpServer;
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = basicCredential;
smtpClient.Timeout = (60 * 5 * 1000);
message.From = fromAddress;
message.Subject = subject;
message.IsBodyHtml = false;
message.Body = body;
message.To.Add(recipient);
if (attachmentFilename != null)
message.Attachments.Add(new Attachment(attachmentFilename));
smtpClient.Send(message);
}
Dzięki za wszelką pomoc.
c#
email
smtp
attachment
Jon
źródło
źródło
Attachment.Name
właściwość?Name
jest wyświetlana jako nazwa załącznika po odebraniu wiadomości e-mail z załącznikiem. Możesz więc spróbować dowolnej wartości.Odpowiedzi:
Prosty kod do wysłania wiadomości e-mail z załącznikiem.
źródło: http://www.coding-issues.com/2012/11/sending-email-with-attachments-from-c.html
źródło
using(SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com")) { //code goes here using(MailMessage mail = new MailMessage()){ //code goes here } }
Jawne wypełnienie pól ContentDisposition załatwiło sprawę.
BTW , w przypadku Gmaila możesz mieć pewne wyjątki dotyczące bezpieczeństwa SSL, a nawet portu!
źródło
FileInfo
obiektu dostaćCreationTime
,LastWriteTime
iLastAccessTime
właściwości? I tak tworzysz, aby uzyskać tęLength
właściwość.Oto prosty kod do wysyłania poczty z załącznikiem
Czytaj więcej Wysyłanie e-maili z załącznikiem w C #
źródło
Ukończenie rozwiązania Ranadheer przy użyciu Server.MapPath do zlokalizowania pliku
źródło
Server.MapPath
bierze i kiedy należy go używać?źródło
Zrobiłem krótki kod, aby to zrobić i chcę się z tobą podzielić.
Tutaj główny kod:
źródło
Spróbuj tego:
źródło
Wypróbowałem kod dostarczony przez Ranadheer Reddy (powyżej) i działał świetnie. Jeśli korzystasz z komputera firmowego z ograniczonym serwerem, może być konieczna zmiana portu SMTP na 25 i pozostawienie nazwy użytkownika i hasła pustych, ponieważ zostaną one automatycznie wypełnione przez administratora.
Początkowo próbowałem użyć EASendMail z nugent menedżera pakietów, ale zdałem sobie sprawę, że jest to płatna wersja z 30-dniową wersją próbną. Nie trać czasu, chyba że planujesz go kupić. Zauważyłem, że program działał znacznie szybciej przy użyciu EASendMail, ale dla mnie darmowy był szybszy.
Tylko moje 2 centy warte.
źródło
Użyj tej metody, aby w ramach usługi poczty e-mail można było dołączyć dowolną treść wiadomości e-mail i załączniki do programu Microsoft Outlook
using Outlook = Microsoft.Office.Interop.Outlook; // Odwołanie do Microsoft.Office.Interop.Outlook z lokalnego lub nuget, jeśli później będziesz używać agenta kompilacji
źródło