As your method doesn't itself allocate any external resource, your should definitely not implement
Basic Dispose Pattern,
Implementing a Dispose Method.
These are useful when your class itself directly allocates an external resource (i.e. not when it is allocated through a disposable .NET class). (They can also be useful if your class needs to reference something in a static field).
You should also not dispose any object you didn't allocate in your own code. As your class receives it's
MailMessage through, it is not aware of their life cycle and should not dispose them (unless they are provided by an IoC container through these properties, but then they should be provided in a constructor).
The code allocating the
MailMessage should itself take care of disposing it.
Your class could be completely in charge of the
SmtpClient, and then should allocate it and dispose it.
Not implementing the full Dispose pattern
The full dispose pattern allows a finalizer to release external resources should the client code neglect to dispose it.
Your finalizer would then end up on the finalizer queue (along with those from the
MailMessage if they are not referenced elsewhere), and all three of them would then be called at the same time some time later.
MailMessage really not be referenced elsewhere, they would take care of their resources, and your finalizer would have nothing useful to do.
Should they be referenced elsewhere, your finalizer would dispose them, rendering them unusable.