How to insure MFMailComposeViewController doesnt send email when body is not empty? - iphone

I have MFMailComposeViewController in my app in order to allow the user easily email me about suggestions and feedback on the app but I get about 3 emails a day which are just empty in the body or just the users email signature.
Is there any way of checking if the body of an email is not empty before it is sent with MFMailComposeViewController?

This is not a programming answer, and might be a bit off topic, but I have released a few apps with similar functionality, and have seen the same thing.
I have also talked with a few of the users who have sent in empty emails, and have learned that sometimes they sere just trying out the various functions of the App, and sometimes they get to the feedback page, but don't want to take the time to type out an email on their phone.
I would think of this as more of a customer service problem, and less of a programming challenge. I would use the opportunity to follow up with the users who send the empty emails. (At least now you have their email - if you don't let them send the form without a body you will likely never get it.) One option is to send a standard follow-up email that says you received an empty email from them and would love to hear their feedback on your product. (Perhaps even send them a quick survey) .

Once you have displayed the MFMailComposeViewController's view you cannot get at the message or control the behaviour. You cannot stop people sending empty mails.
If you really want to do this you will have to write a replacement view and controller. It is probably easier to filter the blank mails at the receiving end though :-)

Related

How to know that an email message was read?

I have a software that sends notifications, quotes and invoices to "clients of my clients" by email. Sometimes people don't answer it very fast, so someone needs to call by phone to confirm if they received and get the feedback. I would like to automate this, to know if them, at least, read the email. I know this is very difficult due to how email works, but some companies already try to do this in a satisfactory way, like:
mailgun.com
mailchimp.com
sendwithus.com (YCombinator funded).
In HTML mail messages we can create a resource that points to the server, like a image. But mail clients usually ask permission to the user to load the images. So, problem
here.
But for text mail messages? Is there any way to know the email was read? How companies these companies do?
PS: I don't know what tags is the best to classify my answer, I shall appreciate any edit.
There is no way to be 100% sure if a email was opened, because of its architecture. There are some techniques to do this, but it always depends of user actions and mail client configurations. But:
For HTML messages you can use images and/or the return receipts (RFC 3798).
For text based messages you can use only the return receipts (RFC 3798).
About opening tracking:
Opens are tracked by including a transparent .png file, which will
only work if there is an HTML component to the email (i.e., text only
emails will not track opens). You should note that many email service
providers disable images by default, so this data will only show up if
the recipient clicks on display images button in his/her email.
(Text extracted from mailgun.com user docs)
References:
MailGun.com documentation.
Previous discutions on this thread.
As arnt says, you're fighting the design and basic operation of e-mail. Whenever you send a mail, there is a boundary between a MTA you control (or at least have an account on) and a MTA that is responsible for your target user's mail. What you can know is whether the user's MTA accepted the mail for delivery. Whatever happens afterwards is outside of your control.
Consider an example of a snail mail. When the package enters the recipient's box, you won't know whether they put the whole unopened envelope to a trash bin, or whether they opened is and read the contents very carefully. You can approximate that goal by using crude measures (like embedding a webcam-and-a-computer which will activate upon envelope opening and send you the snapshot of the face of the opener via a cell phone), but doing so is unreliable, unethical, and probably illegal in plenty of countries.
The "return receipts" or embedded image links are similar -- because the whole e-mail is already in the hands of the user's SW, they can do anything with it. A good MUA will probably ask before sending out dumb return receipts, and it also won't load remote images in HTML mail (because it's easy to create an http://trackme.example.org/mail/for/user/12345/message/666/image.png and have a database which says "hey, this URL belongs to Mr. Pichler, and is used in the first message we sent him). The most you can do is to ask nicely, and return receipts (RFC 3798) are a machine-readable way of doing just that.

How to prevent the acidentally mail sending in my app?

Too many times i receive mails with no content or with just "Sent from my iPhone". Those mails are sent from the "contact" section in my app.
After a little bit, it became boring.
So, is there any way to prevent the accidentally mail sending? I'm tired to see blank emails!
Don't think one can do much about the empty mails. (Maybe I haven't received so many yet that it troubles me ;) )
On the there hand the benefit of receiving user mail with a contents outweighs the boring empty mails. So I would just put up with the empty mails and maybe create a filter in the email client.
You could use the addresses for a newsletter with info about your app (with an out-out of course)
As you can not send mail through phones mailApp without user pressing the send button you also can't stop it from sending mail. If it really really bothers you you'll have to encode your own SMTP protocol and start sending mail directly from your code. But is it really worth it?
Or you can make user to type the text into a form (textbox) before calling mail-app. If he wrote something you pass it to mail-app and then he must go trough 'send procedure'

Is there a way to restrict sending an email to a pre-defined destination only?

I would like to send some info from within the app per email - but restruct the recipient list.
I know when sending emails the standard email-dialog opens. However, is there a solution anyway? Possibly somehow intercepting the "Send" Btn and at least check the recipient list.
No, you cannot do this. iOS requires that the user controls the final setup of an outbound email for security/trust reasons. If you're asking for undocumented workarounds, someone (not me) might know one, but your app won't be App Store-eligible if you find one.
As commenter #Rog says, if you send email via your own server, you can do this however you want without Apple's restrictions.

Email Program / Service that will hold messages until sender fills out a CAPTCHA

I'm looking for the following service >>
When a person emails an individual, the email goes into a temp hold inbox that they do not see. The person who sent the email will receive an auto responder asking them if they are a real person and they have to fill out a CAPTCHA or something along those lines for the message to be released onto the client.
Thank you in advance!
Brandon
What you are looking for is called "Challenge-Response spam protection"; you may want to read the Wikipedia article on C/R spam protection. There is some software out there that does this, but this technique is not often seen.
And this is for a reason. Consider that
Delivery Notifications will have an empty <> Return-Path and will not pass the filter
C/R places a burden too heavy on the sender. I have sent around 15 different mails today, 4 of them to previously unknown contacts. I would not bother doing 4 captchas.
Many Captchas are inaccessible for e.g. blind users
Consider using some other anti-spam technique. Why would you need to do something that nobody else does?
Why not just force the user to fill out a captcha before the email is sent? It reduces the need for holding temporary emails.

Preventing spam through e-mail frontend

I've written a bug reporter for my game, and after it launches, the user can review the data and submit the report to my web server via HTTP. If the submission fails, the user has the option to save the report and try again later, using the bug reporter itself, uploading the file with a web form, or attaching the report to an e-mail. I know that I can prevent spam over HTTP by analyzing the source IP, but I'm not sure how to go about this when receiving reports over e-mail. Any ideas?
Thanks,
Rob
EDIT:
The attachment will always be in JSON format; any other will be rejected. I'm just worried someone will do this:
for i = 1, 10000 do
json = generate_valid_json()
send_email(json)
end
and flood my bug tracker with noise.
Other than regular spam filters, etc I do have a suggestion for this.
If, in your application, or page, you can specify a Subject= with the Mailto: link, put a unique ID in the Subject of your message that you will be expecting to receive.
That way you accomplish 2 goals - recognizing the ID in the subject, you will know it's not spam, and if that ID is associated with your bug report, you'll already know where to put it when it arrives.
EDIT: This doesn't necessarily have to be in the subject, either - could be in the body, or you could simply give them a unique ID e-mail address to send to if you can support a catchall... like bug-394291#bugs.whatever.com.
How about saving the report when the first attempt to upload fails. When the user starts the game, start a background thread which tries to deliver the report again. Eventually, it should work and the user will have to do anything.
Sounds like you're trying to tell the difference between e-mail from random people you've never talked to before, that are sending you attachments, from spam e-mail.
Good luck!
Can you change the e-mail address every so often?
Require a certain subject line?
Require plain-text e-mail?