Submit Hint Search The Forums LinksStatsPollsHeadlinesRSS
14,000 hints and counting!


Click here to return to the 'Add mobile carrier and SMS email to Address Book entries' hint
The following comments are owned by whoever posted them. This site is not responsible for what they say.
Add mobile carrier and SMS email to Address Book entries
Authored by: rycardo on Jul 20, '09 02:00:57PM
Excellent script!

After running this script, if you would like to be able to add the SMS email
address to new and/or individual contacts. I modified a script I have to do this as an Address Book Plug-In.

Copy the code below and Paste in to Script Editor and save to either:
/Library/Address Book Plug-Ins or
/Users/your user name/Library/Address Book Plug-Ins.

You'll need to Quit and re-Open Address Book, but then when you click on the mobile label of a phone number, you will see "Create SMS Email Address".

There a few properties at the top of the script which should make it easy to modify for other carriers, countries, or web sites.

Rycardo

NB It's a long script, I'm not sure how to make it display in a small box with scroll bars.

-- This is the text that shows in the menu when you click on 'mobile' next to the phone number
property menuTitle : "Create SMS/MMS Email Address"

-- These are used in the curl shell to get the information
property shellCurl : "curl -A Mozilla/4.0 -G "
property shellURL : " http://www.whitepages.com/carrier_lookup?"
property shellDataBegin : "-d carrier=att -d number_0="
property shellDataEnd : " -d response=1"

-- These are used to parse out the web result
property textBefore1 : "class=\"carrier_result"
property textBefore2 : "("
property textAfter : ")"

-- These are the TelCos, the name that appears in the web result, and the domain used for email.
property mobileTelCos : {{"Verizon", "@vtext.com"}, {"AT&T/Cingular", "@txt.att.net"}, {"T-Mobile", "@tmomail.net"}, {"Cellular One", "@mobile.celloneusa.com"}, {"Alltel Wireless", "@message.alltel.com"}, {"Sprint PCS", "@messaging.sprintpcs.com"}}

using terms from application "Address Book"
	on action property
		return "phone"
	end action property
	
	on action title for the_person with the_field
		return menuTitle
	end action title
	
	on should enable action for the_person with the_field
		return true
	end should enable action
	
	on perform action for the_person with the_field
		set theValue to ((value of the_field) as string)
		set theLabel to ((label of the_field) as string)
		set theName to ((name of the_person) as string)
		
		if theLabel is equal to "mobile" then
			set mobileNumber to my getmobilenumber(theValue)
			set mobileTelCo to my lookupMobileTelCo(mobileNumber)
			set emailAddress to my getSMSEmail(mobileTelCo, mobileNumber)
			set theResult to my addEmailAddress(the_person, emailAddress, mobileTelCo)
			
			save addressbook
			return true
		else
			display alert "You are attempting to look up the email address for " & theName & "'s " & theLabel & " phone " & theValue & "." & return & return & "This script only works for mobile phones."
			return false
		end if
		
	end perform action
end using terms from

on getmobilenumber(phonenumber)
	tell application "Address Book"
		set onlyNumbers to "0123456789"
		set theNumber to ("" as string)
		repeat with i from 1 to (length of phonenumber)
			set theChar to ((text i thru i of phonenumber) as string)
			if onlyNumbers contains theChar then
				set theNumber to theNumber & (theChar as string)
			end if
		end repeat
	end tell
	return theNumber
end getmobilenumber

on addEmailAddress(thePerson, emailAddress, emailLabel)
	tell application "Address Book"
		try
			tell thePerson
				-- is there a dupe or no email found?
				set dupe to false
				
				-- if no email address found
				if emailAddress is "" then
					set dupe to true
				end if
				
				-- checks all email addresses of the person for duplicates
				set emailList to every email --of this_person
				repeat with existingMail in emailList
					if value of existingMail is equal to emailAddress then
						set dupe to true
					end if
				end repeat
				
				-- if there are no duplicates, add the new email address
				if dupe is false then
					make new email at end of emails with properties {label:"mobile", value:emailAddress}
				else
					display alert ((name of thePerson) as string) & " already has " & emailAddress & " as a contact Email."
				end if
				
			end tell
			
		on error eM number eN
			display dialog eM with title eN
		end try
	end tell
end addEmailAddress

on lookupMobileTelCo(mobileNumber)
	try
		tell application "Address Book"
			set theShell to shellCurl & shellDataBegin & mobileNumber & shellDataEnd & shellURL
			
			set theResult to do shell script theShell
			
			set theMark to (the offset of textBefore1 in theResult)
			if theMark > 0 then
				set theResult to ((text theMark thru (the length of theResult) of theResult) as string)
				
				set theMark to (the offset of textBefore2 in theResult)
				if theMark > 0 then
					set theResult to ((text (theMark + 1) thru (the length of theResult) of theResult) as string)
					set theMark to (the offset of textAfter in theResult)
					
					if theMark > 0 then
						set theResult to ((text 1 thru (theMark - 1) of theResult) as string)
					else
						set theResult to ""
					end if
				else
					set theResult to ""
				end if
			else
				set theResult to ""
			end if
		end tell
	on error eM number eN
		display dialog eM with title eN
		set theResult to ""
	end try
	return theResult
end lookupMobileTelCo

on getSMSEmail(mobileTelCo, mobileNumber)
	try
		set theEmail to ""
		
		repeat with telCo in mobileTelCos
			if mobileTelCo is equal to (item 1 of telCo) then
				set theEmail to ((mobileNumber & (item 2 of telCo)) as string)
				exit repeat
			end if
		end repeat
		
	on error eM number eN
		display dialog eM with title eN
		set theEmail to ""
	end try
	
	return theEmail
end getSMSEmail


[ Reply to This | # ]