View Full Version : سوال: ارسال ایمیل از نرم افزار Windows Forms
ROSTAM2
جمعه 22 تیر 1403, 07:09 صبح
سلام
من می خوام برای بازیابی رمز ارسال ایمیل به حساب ایمیل کاربر داشته باشم اما با این خطا مواجه می شه
155863
Imports System.Net.Mail
Public Class Mail
Protected Friend Shared WithEvents SMTP As New SmtpClient("ssl://smtp.gmail.com:465")
Shared Sub SendMessage(Address As String, UserAccount As String, Value As String)
SMTP.UseDefaultCredentials = False
SMTP.Credentials = New Net.NetworkCredential("vbloverprogrammer@gmail.com", "Password")
SMTP.Port = 587
SMTP.EnableSsl = True
SMTP.Host = "smtp.gmail.com"
Dim Mail As New MailMessage
Mail.From = New MailAddress("vbover@rocketmail.com")
Mail.To.Add(Address)
Mail.Subject = "بازیابی رمز حساب کاربری نرم افزار ثبت خرید و فروش"
Mail.Body = String.Format("{1} {2}: {0}{3} ", vbNewLine, "کد بازیابی رمز حساب کاربری", UserAccount, Value)
Try
SMTP.Send(Mail)
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Exclamation)
End Try
End Sub
Private Shared Sub SMTP_SendCompleted(sender As Object, e As System.ComponentModel.AsyncCompletedEventArgs) Handles SMTP.SendCompleted
MsgBox("کد بازیابی رمز به پست الکترونیک حساب کاربری ارسال شد....", MsgBoxStyle.Information)
End Sub
End Class
شماره Port درسته یا نه؟!
باید از فایروال Port آزاد بشه؟!
من ی ارسال ایمیل ساده می خوام یک کد به ایمیل کاربر ارسال کنه....
Private Sub LinkLabel1_LinkClicked(sender As System.Object, e As System.Windows.Forms.LinkLabelLinkClickedEventArgs ) Handles LinkLabel1.LinkClicked
Mail.SendMessage("vblovergamer@gmail.com", "ROSTAM", "123456789")
End Sub
_behnam_
شنبه 23 تیر 1403, 02:55 صبح
سلام.
برای استفاده از SSL سرور جیمیل از پورت 587 استفاده کنید.
ایمیلی هم که به Mail.From دادید به ایمیلی که به NetworkCredential دادید تغییر بدید و تست کنید ببینید مشکلتون حل میشه.
ROSTAM2
شنبه 23 تیر 1403, 03:45 صبح
سلام.
برای استفاده از SSL سرور جیمیل از پورت 587 استفاده کنید.
ایمیلی هم که به Mail.From دادید به ایمیلی که به NetworkCredential دادید تغییر بدید و تست کنید ببینید مشکلتون حل میشه.
سلام
همه اینکارا رو انجام دادم.
بقیه پروژه های آموزشی رو هم تست کردم خطا دارن. فکر کنم چیزی باید روی سیستم نصب یا فعال بشه! (Windows 10)
_behnam_
شنبه 23 تیر 1403, 07:18 صبح
همه اینکارا رو انجام دادم.
بقیه پروژه های آموزشی رو هم تست کردم خطا دارن. فکر کنم چیزی باید روی سیستم نصب یا فعال بشه! (Windows 10)
نیاز به چیز اضافه نیست. فقط کافیه اطلاعات رو درست وارد کنید. خطای مربوط به 5.7.0 معتبر نبودن یوزر و پسورد هست. اطلاع دارید که باید از App Passwords استفاده کنید؟
مطمعن هستید پسورد رو درست وارد میکنید؟
کلاسی ک نوشتم برای ارسال ایمیل تست کردم مشکل نداشت.
Imports System.Net
Imports System.Net.Mail
Imports System.Windows.Forms.VisualStyles.VisualStyleEleme nt.StartPanel
Public Class GmailSenderResult
Public Success As Boolean = False
Public Message As String = vbEmpty
Public Ex As Exception
End Class
''' <summary>
''' Class Gmail Sender
''' by : Behnam Eslamirad
''' </summary>
Public Class GmailSender
Private SMTP_SERVER As String = "smtp.gmail.com"
Private SMTP_PORT As Integer = 587
''' <summary>
''' Mail Sender
''' </summary>
Public Sender As String
''' <summary>
''' Password Mail Sender
''' </summary>
Public Password As String
''' <summary>
''' Create object from class with constract parameters
''' </summary>
''' <param name="Sender">Mail Sender</param>
''' <param name="Password">Password Mail Sender</param>
Public Sub New(Sender As String, Password As String)
Me.Sender = Sender
Me.Password = Password
End Sub
''' <summary>
''' Create object from class without constract parameters
''' </summary>
Public Sub New()
End Sub
''' <summary>
''' Send
''' </summary>
''' <param name="MailTo">Destination email for sending messages</param>
''' <param name="Subject">The Subject message to send</param>
''' <param name="Message">The message to send</param>
''' <returns>Result as GmailSenderResult</returns>
Public Function Send(MailTo As String, Subject As String, Message As String) As GmailSenderResult
Dim Result As New GmailSenderResult()
Try
Dim SmtpServer As New SmtpClient()
Dim mail As New MailMessage()
SmtpServer.UseDefaultCredentials = False
SmtpServer.Credentials = New Net.NetworkCredential(Sender, Password)
SmtpServer.Port = SMTP_PORT
SmtpServer.Host = SMTP_SERVER
SmtpServer.EnableSsl = True
SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network
mail = New MailMessage()
mail.From = New MailAddress(Sender)
mail.To.Add(MailTo)
mail.Subject = Subject
mail.Body = Message
SmtpServer.Send(mail)
Result.Message = "sent password."
Result.Success = True
Catch ex As Exception
Result.Ex = ex
Result.Message = ex.Message
Result.Success = False
End Try
Return Result
End Function
End Class
برای استفاده کدهای زیر
Dim gmail As New GmailSender("example@gmail.com", "app passwords gmail")
Dim Result As GmailSenderResult = gmail.Send("example@gmail.com", "subject message", "hi, this is body message")
If Result.Success Then
MsgBox("Sent message.")
Else
MsgBox(Result.Message)
End If
البته فک کنم کدهای خودتون هم مشکلی نداشته باشه و فقط با قراردادن App Passwords مشکل حل بشه.
ROSTAM2
شنبه 23 تیر 1403, 08:33 صبح
نیاز به چیز اضافه نیست. فقط کافیه اطلاعات رو درست وارد کنید. خطای مربوط به 5.7.0 معتبر نبودن یوزر و پسورد هست. اطلاع دارید که باید از App Passwords استفاده کنید؟
مطمعن هستید پسورد رو درست وارد میکنید؟
کلاسی ک نوشتم برای ارسال ایمیل تست کردم مشکل نداشت.
Imports System.Net
Imports System.Net.Mail
Imports System.Windows.Forms.VisualStyles.VisualStyleEleme nt.StartPanel
Public Class GmailSenderResult
Public Success As Boolean = False
Public Message As String = vbEmpty
Public Ex As Exception
End Class
''' <summary>
''' Class Gmail Sender
''' by : Behnam Eslamirad
''' </summary>
Public Class GmailSender
Private SMTP_SERVER As String = "smtp.gmail.com"
Private SMTP_PORT As Integer = 587
''' <summary>
''' Mail Sender
''' </summary>
Public Sender As String
''' <summary>
''' Password Mail Sender
''' </summary>
Public Password As String
''' <summary>
''' Create object from class with constract parameters
''' </summary>
''' <param name="Sender">Mail Sender</param>
''' <param name="Password">Password Mail Sender</param>
Public Sub New(Sender As String, Password As String)
Me.Sender = Sender
Me.Password = Password
End Sub
''' <summary>
''' Create object from class without constract parameters
''' </summary>
Public Sub New()
End Sub
''' <summary>
''' Send
''' </summary>
''' <param name="MailTo">Destination email for sending messages</param>
''' <param name="Subject">The Subject message to send</param>
''' <param name="Message">The message to send</param>
''' <returns>Result as GmailSenderResult</returns>
Public Function Send(MailTo As String, Subject As String, Message As String) As GmailSenderResult
Dim Result As New GmailSenderResult()
Try
Dim SmtpServer As New SmtpClient()
Dim mail As New MailMessage()
SmtpServer.UseDefaultCredentials = False
SmtpServer.Credentials = New Net.NetworkCredential(Sender, Password)
SmtpServer.Port = SMTP_PORT
SmtpServer.Host = SMTP_SERVER
SmtpServer.EnableSsl = True
SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network
mail = New MailMessage()
mail.From = New MailAddress(Sender)
mail.To.Add(MailTo)
mail.Subject = Subject
mail.Body = Message
SmtpServer.Send(mail)
Result.Message = "sent password."
Result.Success = True
Catch ex As Exception
Result.Ex = ex
Result.Message = ex.Message
Result.Success = False
End Try
Return Result
End Function
End Class
برای استفاده کدهای زیر
Dim gmail As New GmailSender("example@gmail.com", "app passwords gmail")
Dim Result As GmailSenderResult = gmail.Send("example@gmail.com", "subject message", "hi, this is body message")
If Result.Success Then
MsgBox("Sent message.")
Else
MsgBox(Result.Message)
End If
البته فک کنم کدهای خودتون هم مشکلی نداشته باشه و فقط با قراردادن App Passwords مشکل حل بشه.
App Password چی هست حالا؟!
من از App Password هیچ اطلاعی ندارم.
_behnam_
شنبه 23 تیر 1403, 09:48 صبح
App Password چی هست حالا؟!
من از App Password هیچ اطلاعی ندارم.
از سال 2022 گوگل بخاطر امنیت حساب های کاربری دیگه به کلاینت ها اجازه ورود با یوزر و پسورد جیمیل رو نداد و بجاش اعلام کرد که اگر میخواید توی نرم افزارهاتون از حساب جیمیل استفاده کنید باید حتما توی تنظیمات حسابتون یه اپ بسازید و از پس کدی که بهتون میدیم به جای پسورد توی نرم افزاراتون استفاده کنید.
ساخت App Passwords هم یکی از شروطش فعال کردن two-factor authentication (2FA) حساب جیمیل هست.
پس اول two-factor authentication (2FA) رو فعال کنید و بعد به لینک زیر برید و اپ بسازید تا بهتون یه Passcode بده که 16 رقمی هست.
https://myaccount.google.com/apppasswords
اینجا لاگین میکنید مجدد و اپ میسازید.
ساختار Passcode هم به شکل زیره
xxxx xxxx xxxx xxxx
که دقیقا همین رو بجای پسورد جیمیل قرار میدید.
ROSTAM2
یک شنبه 24 تیر 1403, 22:21 عصر
از سال 2022 گوگل بخاطر امنیت حساب های کاربری دیگه به کلاینت ها اجازه ورود با یوزر و پسورد جیمیل رو نداد و بجاش اعلام کرد که اگر میخواید توی نرم افزارهاتون از حساب جیمیل استفاده کنید باید حتما توی تنظیمات حسابتون یه اپ بسازید و از پس کدی که بهتون میدیم به جای پسورد توی نرم افزاراتون استفاده کنید.
ساخت App Passwords هم یکی از شروطش فعال کردن two-factor authentication (2FA) حساب جیمیل هست.
پس اول two-factor authentication (2FA) رو فعال کنید و بعد به لینک زیر برید و اپ بسازید تا بهتون یه Passcode بده که 16 رقمی هست.
https://myaccount.google.com/apppasswords
اینجا لاگین میکنید مجدد و اپ میسازید.
ساختار Passcode هم به شکل زیره
xxxx xxxx xxxx xxxx
که دقیقا همین رو بجای پسورد جیمیل قرار میدید.
من که 2FA رو پیدا نکردم آیا می تونه تغییر کرده باشه به 2-Step Verification
155872
_behnam_
یک شنبه 24 تیر 1403, 23:38 عصر
بله درسته همین گزینه هست
ROSTAM2
دوشنبه 25 تیر 1403, 15:20 عصر
بله درسته همین گزینه هست
خیلی خیلی ممنون و تشکر فراوان
ویدئوش رو هم ساختم برای آیندگانی که می خوان ارسال ایمیل داشته باشن: https://www.aparat.com/v/ehm9b5d
ROSTAM2
یک شنبه 31 تیر 1403, 22:33 عصر
سلام مجدد
من با ارسال نامه به ایمیل هایی که وجود ندارد مشکل دارم. چطور می شه استعلام گرفت که یک ایمیل موجود نیست. تا بعنوان ارسال صحیح گزارش داده نشه
155904
ROSTAM2
دوشنبه 01 مرداد 1403, 15:19 عصر
سلام سجدد
آیا کسی می دونه چرا ارسال ایمیل از سیستم من دیگه کار نمی کنه. این اتفاق بعد از نصب SQL Server و SQL Server Management Studio افتاده.
به نظر میاد ربطی ب SQL Server نداشته باشه کلا نمی شه ایمیل ارسال و دریافت کرد از گوگل از صبح امروز اینطور شده اول مردادماه سال 1403
mazoolagh
دوشنبه 01 مرداد 1403, 19:14 عصر
سلام مجدد
من با ارسال نامه به ایمیل هایی که وجود ندارد مشکل دارم. چطور می شه استعلام گرفت که یک ایمیل موجود نیست. تا بعنوان ارسال صحیح گزارش داده نشه
کاش واسه این تاپیک مستقل میزدین.
یه بخشی که valid بودن آدرس ایمیل از نظر فرمت هست که خب کاری نداره.
گام بعدی چک valid بودن خود دومین هست،
و بعد از اون چک درست بودن رکوردهای mx واسه اون دومین هست.
ولی باز هم همه اینها مثبت باشه تا پاسخ سرور رو نگیرین اطمینانی نیست.
یک سری api دارن بعضی شرکتها (فکر نکنم رایگان باشه) ولی برای ایمیل های ir مطمئنا کار نمیکنه.
=====
به هر حال شما برای فروش نرم افزارهای خودتون باید یک سایت داشته باشین.
برای ارتباط با مشتریاتون بهتره روی همون سایت هم وب سرویس پیامک و هم سرویس ایمیل واسه ریست پسورد و ... بذارین (نه این که از کامپیوتر خودتون بفرستین)
و هم این که ایمیل و شماره موبایل خریدار رو همراه مشخصات دیگه اش در دیتابیس (روی سرور طبیعتا) نگهداری کنین،
و ایمیل و پیامک رو از طریق سرور رو همون آدرس داده شده بفرستین.
_behnam_
چهارشنبه 03 مرداد 1403, 03:06 صبح
سلام مجدد
من با ارسال نامه به ایمیل هایی که وجود ندارد مشکل دارم. چطور می شه استعلام گرفت که یک ایمیل موجود نیست. تا بعنوان ارسال صحیح گزارش داده نشه
سلام
تاجایی که من بررسی کردم توی سرورهای جیمیل امکان مشخص شدن عدم وجود ایمیل با استفاده از SmtpClient وجود نداره. یعنی جیمیل درصورت درست نبودن آدرس ایمیل هم هیچ catch رو برنمیگردونه.
یه راهش اینه ایمیل های ورودی رو چک کنید. چراکه جیمیل وقتی ایمیلی رو به دلیل عدم وجود گیرنده ارسال نکنه ، یه ایمیل واستون میفرسته و توش میگه که اینیل وجود نداشت. ( که اصلا پیشنهاد نمیشه این روش ، ممکنه بن بشید)
روش بعد استفاده از سرورشخصی هست که بتونید با تغییرات موقع استفاده از SMTP با توجه به نتیجه catch دلخواه رو ارسال کنید. ( روش منطقی تر)
ROSTAM2
سه شنبه 29 آبان 1403, 15:14 عصر
سلام مجدد
این دستورات ارسال ایمیل در ویندور 10 درست عمل می کنه ولی در ویندوز 7 خطا برمی گردونه....
156295
With SMTP
.UseDefaultCredentials = False
.Credentials = New Net.NetworkCredential("vbloverprogrammer@gmail.com", My.GMailAppPassword)
.Port = 587
.EnableSsl = True
.Host = "smtp.gmail.com"
End With
Dim Mail As New MailMessage(New MailAddress("vbloverprogrammer@gmail.com"), New MailAddress(Address))
With Mail
.Priority = MailPriority.High
.SubjectEncoding = System.Text.Encoding.Default
.IsBodyHtml = True
.BodyEncoding = System.Text.Encoding.Default
Select Case Job
Case SendMailJobs.ActivationSoftware
.Subject = "درخواست فعالسازی نرم افزار محاسبه قیمت تمام شده محصول"
Case SendMailJobs.EMailConfirmation
.Subject = "تأیید پست الکترونیک"
Case SendMailJobs.RecoverPassword
.Subject = "تغییر رمز حساب کاربری"
End Select
.Body = HDoc.documentElement.outerHTML
End With
Try
SMTP.Send(Mail)
Catch ex As Exception
MsgBox(RecoveryCode)
MsgBox(ex.Message, MsgBoxStyle.Exclamation)
Return False
End Try
منظورش از Certificate در این دستور چیه؟!!! و برای رفع خطا باید چکار کرد؟!!!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.