यहां जीमेल के एसएमटीपी का उपयोग करने का एक उदाहरण है, लेकिन यदि आपके पास अपना स्वयं का एसएमटीपी सर्वर है तो आप आसानी से कोड को अनुकूलित कर सकते हैं।
public class QuestionViewModel
{
[Required]
public string Question { get; set; }
public HttpPostedFileBase Attachment { get; set; }
}
तो एक नियंत्रक:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new QuestionViewModel());
}
[HttpPost]
public ActionResult Index(QuestionViewModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
using (var client = new SmtpClient("smtp.gmail.com", 587))
{
client.EnableSsl = true;
client.Credentials = new NetworkCredential("[email protected]", "secret");
var mail = new MailMessage();
mail.From = new MailAddress("[email protected]");
mail.To.Add("[email protected]");
mail.Subject = "Test mail";
mail.Body = model.Question;
if (model.Attachment != null && model.Attachment.ContentLength > 0)
{
var attachment = new Attachment(model.Attachment.InputStream, model.Attachment.FileName);
mail.Attachments.Add(attachment);
}
client.Send(mail);
}
return Content("email sent", "text/plain");
}
}
और अंत में एक दृश्य:
@model QuestionViewModel
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.ValidationSummary(true)
<fieldset>
<div>
@Html.LabelFor(x => x.Question)
@Html.TextAreaFor(x => x.Question)
</div>
<div>
<label for="attachment">Attachment</label>
<input type="file" name="attachment" id="attachment"/>
</div>
<input type="submit" value="Send" />
</fieldset>
}
इस कोड को एक और सुधार
हमेशा की तरह मैं एक दृश्य के मॉडल के साथ शुरू होगा कुछ इंटरफेस को लागू करने और डी का उपयोग कर एक भंडार में मेल की वास्तविक प्रेषण को बाहरी करना होगा मैं नियंत्रक तर्क और मेल भेजने तर्क के बीच युग्मन कमजोर करने के लिए।
ध्यान दें कि आप भी web.config में आपके एसएमटीपी सेटिंग्स कॉन्फ़िगर कर सकते हैं:
<system.net>
<mailSettings>
<smtp from="[email protected]" deliveryMethod="Network">
<network
enableSsl="true"
host="smtp.gmail.com"
port="587"
userName="[email protected]"
password="secret"
/>
</smtp>
</mailSettings>
</system.net>
और फिर बस:
using (var client = new SmtpClient())
{
var mail = new MailMessage();
mail.To.Add("[email protected]");
mail.Subject = "Test mail";
mail.Body = model.Question;
if (model.Attachment != null && model.Attachment.ContentLength > 0)
{
var attachment = new Attachment(model.Attachment.InputStream, model.Attachment.FileName);
mail.Attachments.Add(attachment);
}
client.Send(mail);
}
स्रोत
2011-06-08 16:37:25
बहुत कुछ है! यह बहुत अच्छा काम कर रहा है :) – Marta
toaddress? मुझे नहीं पता था कि पैर पहनने वाले कपड़े पहनते थे! – AaronLS
क्या होगा यदि आपने अपनी 'HttpPostedFileBase' फ़ाइल को पास करने के लिए $ .ajax का उपयोग करने का प्रयास किया है? मैं इसे एक साधारण $ .ajax कॉल के माध्यम से करने की कोशिश कर रहा हूं, लेकिन मुझे अपने नियंत्रक पर एक नल फ़ाइल मिली है। क्या यह सामग्री प्रकार है जो मुझे याद आ रही है? – AdrianoRR