Dave
Dave

Reputation: 121

Programatically send SMS to email using Verizon Motorola Droid on Android

I was wondering if anyone knew the proper way to send an SMS message to an e-mail address using Verizon's CDMA Motorola Droid phone.

The internal messaging application appears to automagically do this. While 3rd party applications like SMSPopup don't seem to be able to properly reply to e-mail addresses unless you compose the message inside the messaging application.

When the internal messaging application sends a SMS message there's a corresponding 'RIL_REQUEST_CDMA_SEND_SMS' entry in the logcat (adb logcat -b radio). When you send a SMS to an e-mail address it prints the same thing, so behind the scenes it looks as though it is sending an sms. The interesting thing is that if you look at the content provider sent box the messages are addressed to various 1270XX-XXX-XXXX numbers.

On other services you can send e-mail addresses by sending a SMS to a predefined short sms number. And then formatting your SMS as emailaddress subject message i.e. http://en.wikipedia.org/wiki/SMS_gateway#Carrier-Provided_SMS_to_E-Mail_Gateways

For example, using T-mobile's number (500) you can send a SMS to an e-mail using the following:

SmsManager smsMgr = SmsManager.getDefault();
smsMgr.sendTextMessage("500", null, "[email protected] message sent to an e-mail address from a SMS", null, null);

Does anyone know if

It might be possible that Verizon somehow generates a fake number temporarily tied to an e-mail address (since repeated messages are not sent to the same number). But, that seems pretty heavy handed.

Thanks!

Upvotes: 4

Views: 3910

Answers (2)

Brad
Brad

Reputation: 11

Your wiki link helped me to find the answer. I'm not totally positive on the this, but it seems to be working when you send a regular text message to this number: 6245 and then the text message will contain the address and subject and body in this format: [email protected] (Subject) body of the email.

here is my snippet of code:

sm.sendTextMessage("6245", null, "[email protected] (Subject) Test email from SMS", null, null);

Upvotes: 1

PVS
PVS

Reputation: 1168

I have been looking for a way to send short emails using the SMS delivery system, and without having to know the service center address, special destinations and message formats etc.

As Dave points out, the stock text messaging app can do this (confirmed with Motorola Droid+Verizon and Attrix+AT&T). Go SMS turns messages to an email address into an MMS. Handcent however, seems to do this just right -- the email from address is the email-to-SMS address e.g. [email protected].

The approach that has worked for me is as follows. This is all highly experimental and completely undocumented.

  • Write directly to the SMS content provider ("content://sms") and insert the outbound message

    ContentValues cv = new ContentValues();
    cv.put("address", "[email protected]");
    String time = System.currentTimeMillis()+"";
    cv.put("date", time);
    cv.put("body", "I love stackoverflow");
    cr.insert(uri, cv); // cr = ContentResolver
    cv.put("type", "6");
    
  • The key "discovery" is type = 6. Values 1 and 2 are for incoming and outgoing SMS (could be the other way around) and 3 is for draft messages. 6 is for messages that could not be sent (empiricaly determined by putting the phone in airplane mode and sending a text to an email address using the stock app).

  • All this places the message into the SMS store. To actually send it, the stock app needs to be poked into retrying. I find putting the phone into airplane mode and toggling back out works--the message is sent to email using SMS!!--but there must be a better way (and Handcent knows it?)

  • And oh Verizon doesn't seem to like angle brackets in its message content.

I have implemented this in an app that tries to determine the phone's email-to-SMS address by sending out an email and looking at the from address: http://bit.ly/J08Dyh

It's not been widely tested yet, so I am equally curious.

PVS

Upvotes: 0

Related Questions