El problema de usar Python para llamar a Outlook para enviar correos electrónicos

Imprimiré tu mensaje de error. "xd2\ Todavía no he ajustado mi perspectiva. Pero creo que debería funcionar. Porque hay muy poca documentación sobre la interfaz COM.

Primero puedes aprender esta interfaz en la documentación de VBA. Encuentre algunos ejemplos de llamadas C++ a Outlook.

Aquí hay un ejemplo que encontré en línea. Sólo como referencia

#!/usr/bin/env? Big Python

"""

¿Respuesta? ¿Simple? ¿Dirección? ¿Libro? ¿Navegador? ¿Rechazar? ¿Convertirse? ¿Eso? ¿Profundidad? ¿Acerca de

Su ?Intercambio? ¿Prospecto? ¿Qué? ¿Contactos? ¿Qué? ¿Mensaje? y

Colaboración",?"¿Colaboración? ¿datos? Objeto ",?" CDO? ¿Para

Windows? 2000",?"CDO? ¿para qué? ¿Windows? 2000",?"Mensajería",

"Concepto",?"CDO? ¿Mensajería? COM? Interfaz ",?" que? IMessage

COM? Interfaz ",?"¿Mensaje? Propiedades".

Qué lástima, ¿no todas las propiedades? ¿Sí? ¿Siempre? disponibles.

¿Exactamente? ¿Ese? ¿gen_py'? directorio? ¿dentro? ¿paquetes de sitio? ¿Mayo?

¿Respuesta? ¿Qué pasa con la interfaz?

p>

enum?{

olTXT?=?1,

olTemplate ? /p>

olMSG?=?3,

Oldock?=?4,

olHTML?=?5,

¿Fuera de tarjeta?= ?6,

Orf Carl?=?Seven

}?OlSaveAsType? ¿Por defecto? p>¿Otros? ¿Por quién?

>

¿Importar? win32com.client

¿Importar? sistema,? Sistema operativo

#?¿Este? ¿Sí? ¿necesidad? ¿Antes? ¿a nosotros? ¿Puedo? ¿incluso? ¿decir? ¿Acerca de? no lo mismo? enumeración? valores.

¿Esperando con ansias? =?win32 com cliente . despacho("Outlook.Application")

¿Clase? Ver:

"a?view?on?namespace.

def?__init__(self, encoding):

"inicialización? ¿eso? ¿Punto de vista? ¿Qué usar? ¿respuesta? ¿personaje? Codificación.

¿Autocodificación? =?Codificación

¿Clase? Vista de Consola (View):

"Una vista estilo consola.

"

¿Mostrar asignación de atributos de espacio de nombres?=?{

win32 com . client . constantes . carpeta ol?:

("+",?"Nombre " ),

win32 com.client.constants.olcontact?:

(">,?"email1address"),

win32 com . client . constantes . ¿Olmail? :

(" >,?"Asunto"),

¿No?:

("?",?"Nombre")

}

def?__init__(self, encoding,?page_width=80,?page_limit=20):

"""

¿Inicialización? ¿eso? ¿Punto de vista? ¿Qué usar? ¿respuesta? ¿personaje? ¿codificación? Entonces qué. ¿eso? ¿Opcional

'Ancho de página'? Entonces qué. 'límite_página'.

"""

Ver.__init__(self, codificación)

self.page_width?=?Ancho de página

self.page_limit ? =?Límite de páginas

def? update_status(self, contador,?max_value):

"¿Actualizar? ¿respuesta? ¿estado? ¿índice? ¿Qué usar? ¿eso? ¿Dado? ¿encimera? ¿valor? Entonces qué. valor máximo.

¿último_contador? =?max(contador?-?1,?0)

Último_ancho? =?int((last_counter?*?self.page_width)?/?valor máximo)

¿Ancho? =?int((Contador?*?self.page_width)?/?Valor máximo)

sys.stdout.write(" . "?*?(ancho?-?last_width))

p>

¿Y si? ¿encimera? ==?Valor máximo:

sys.stdout.write("\n ")

def? Error (auto):

sys.stdout.write("!")

def? show_namespace(self, elemento):

"¿mostrar?ese?espacio de nombres,?¿respuesta?dada?lista?de?elementos'",

si? len(artículo)? >? self.page_limit:

¿Imprimir? "!",?"¿Espectáculo? ¿Ese? ¿El primero",? self.page_limit,? "¿Artículos? Sólo."

¿Para qué? ¿valor? ¿existir? items[:self.page_limit]:

Pruebe:

Decoración,? ¿propiedad? =?self .show_namespace_property_mapping[valor. Categoría]

¿Excepto? Error crítico:

Decoración,? ¿propiedad? =?self . mostrar _ espacio de nombres _ propiedad _ mapeo[ninguno]

¿Imprimir? proporcionar,? self.get_property(valor,?propiedad). Codificación (autocodificación)

def? get_property(self,?object,?property,?default= " ":

Pruebe:

#?Nota:?Negro!

Si?property ? ==?"Sendon":

Devolver getattr(objeto, atributo).

Formato()

¿Volver? getattr(objeto, atributo)

¿Excepto? Error de propiedad:

¿Regresión? Valor predeterminado del sistema

¿Clase? Extractor:

"¿Una?Clase?Segundo?Para?Extraer?El?Elemento/Objeto?De?Carpeta.

Extract_Type_Map?= ?{

win32 com cliente .constantes .ol cita?:

(win32 com .cliente .constantes .olvcal, ? "VC"),

win32 com cliente . ¿contacto?:

(win32 com . client . constantes . tarjeta olv,? "vcf"),

win32 com constantes . >(win32 com. cliente. constantes. ol txt,? "txt"),

¿No?:

(win32 com. cliente. constantes .ol txt,? " txt " )

}

def? __init__(self, view=None):

"¿Inicialización? ¿eso? ¿Extractor? ¿Qué usar? ¿eso? ¿Opcional? Ver "."

self.view? =?Perspectiva

def? extraer(self,?item,?filename):

"Extraer?ese?proyecto?dado?¿dónde?respuesta?archivo?con?ese?nombre?de?archivo?dado"."

Total_Quantity?=?len(items)

Para? range(0,?total):

Valor ]

Prueba:

Guardar como tipo, ? sufijo =?self .extract_type_mapping[categoría de valor]

Error de clave:

Guardar como tipo,? >

Pruebe:

Valor. join(nombre de archivo, str(i)?+?"."?+?suffix),

Guardar como tipo)

¿Excepto? Error de atributo:

si? Vista propia:

self.view.error()

¿excepto? com_error:

si? Vista:

self.view.error()

Si? Vista propia:

self.view .update_status(i?+?1,?total)

¿Clase? Explorador:

"A?" ¿clase? ¿mantener? ¿eso? ¿estado? ¿de? explorar. "

def?__init__(self, view=None):

global?view

self actual?=?self.ns?=?outlook.GetNamespace ("MAPI")

self.view? =?view

self._get_namespace()

def arriba(self):

"¿Promocionar? ¿convertirse en? ¿eso? ¿padres? ¿Carpeta? ¿devolver? ¿si? ¿él? Era. Es posible. ”

Si?self-current?!=?self-ns:

self-current?=?self.current.parent

self.

_get_namespace()

¿Volver? 1

¿Volver? 0

definición? abajo(self, nombre):

"""

¿Abajo? ¿en? esa? carpeta? ¿con qué? ¿ese? nombre? dado? ¿volver? ¿si?

¿Es posible?

"""

¿Si? self.choices.has_key(nombre):

¿Actualidad propia? =?self.choices[nombre]

Auto. _get_namespace()

¿Volver? 1

¿Volver? 0

definición? get_items(self):

"¿Devolver? ¿Lista? de? elementos? en? la? carpeta? actual.

¿Devolver? elementos propios

def? getchoice(self):

"¿regresar?" ¿respuesta? ¿diccionario? ¿Cartografía? ¿nombre? ¿A dónde ir? objeto. "

¿Volver? Auto-selección

def?_get_namespace(self):

"""

¿Un? ¿interno? ¿método? ¿Cual? ¿refrescar? ¿eso? ¿actual? espacio de nombres.

"""

Auto-selección?self-item?=?get_namespace(self.current,?self-view)

def?get_namespace(espacio de nombres , ver =Ninguno):

"""

¿Obtener? ¿eso? ¿contenido? ¿de? ¿eso? ¿Dado? espacio de nombres',? ¿devolver? ¿respuesta? ¿diccionario? ¿Acerca de

elección? (¿apropiado? ¿para qué? carpeta)? Entonces qué. ¿respuesta? ¿Lista? ¿de? ¿cosa? (¿apropiado? para

mensaje).

"""

d?=?{}

l?=?[]

#?¿Primero? ¿Intentar? ¿Qué? ? ¿Qué? ¿Qué?

Espera

¿nombre_objeto? =?Atributo[0]

¿Subobjeto? getattr(espacio de nombres, nombre del objeto)

Error de atributo:

¿Qué? ¿Qué?

¿Qué? >¿Qué? 1. disparo(subobjeto)

¿para qué? rango(1,?número_total?+?1):

nombre_campo ?=?propiedad[1]? ?el?diccionario?if?

?

l.append(subobject[i])

¿Si? nombre_campo ¿No?

d[getattr] (subobjeto[i],? nombre_campo)]?=?Subobjeto[i]

¿Excepción?

Aprobado

#?Posición?

Si? ver:

view.update_status(i,? total)

¿Devolver?l

def

#? obtener?codificación?si?

¿Y si? len(sys.argv)? >? 2:

¿Codificación? =?sys.argv[2]

De lo contrario:

¿Codificación? =?"UTF No. 8"

¿Opinión? =?Vista de consola (codificación)

¿Explorador? =?Navegador(ver)

¿Cuándo? 1:

#?Consejos? ¿eso? usuario.

¿Imprimir? "-"?*?60

ver . show _ namespace(explorer . get _ items())

¿Imprimir? "-"?*?60

¿Imprimir? "〖美〗p? ¿Propio? ¿[E]xtract? [¿Q]uit? [¿Ayuda? ¿Y luego qué?& ltReturn & gt!"

¿Imprimir? "-"?*?60

s? =?entrada sin formato(). banda(). Upper()[0]

#?¿Descubrir? ¿eso? ¿Está bien? acción.

¿Y si? ¿s? ==?"U":

#?Levántate.

explorer.up()

¿Elif? ¿s? ==?"D":

#?¿Preguntar? ¿para qué? ¿eso? ¿Carpeta? ¿A dónde ir? Ingresar.

¿Imprimir? "¿Bajar? Se convierte en:"

¿Nombre? =?entrada sin procesar()

si? ¿No es así? explorer.down(nombre):

¿Imprimir? "¿No? ¿Así? Objetivo."

¿Elif? ¿s? ==?"E":

#?¿Preguntar? ¿para qué? ¿eso? ¿documento? ¿A dónde ir? ¿extracto? respeto.

¿Imprimir? "¿Extracto? Destinatario:"

¿Nombre del archivo? =?Entrada sin formato()

¿Imprimir? "Extrayendo..."

¿Extractor? =? extractor(vista)

extractor . extraer(explorador . get_items(), ? nombre de archivo)

elif? ¿s? ==?"Preguntar":

¿Imprimir? "Saliendo..."

¿Subir? Salida del sistema

¿Elif? ¿s? ==?"H":

¿Imprimir? "¿Escribir? ¿Eso? ¿d? ¿Clave? ¿Entonces? & ltReturn & gt? ¿Dónde? ¿Entrar? ¿A? Carpeta.

¿Imprimir? "¿Dar? ¿eso? ¿exacto? ¿Carpeta? ¿nombre? ¿cuando? ¿pista? Entonces qué. ¿noticias? & ltReturn & gt."

¿Imprimir?" ¿eso? ¿tú? ¿llave? ¿Entonces qué? <Volver>? ¿A dónde ir? mudarse de lugar? ¿arriba? ¿uno? nivel. "

¿Imprimir?" ¿eso? q? ¿llave? ¿Entonces qué? <Volver>? ¿A dónde ir? Abandonar. "

¿Imprimir?" ¿eso? h? ¿llave? ¿Entonces qué? <Volver>? ¿A dónde ir? ¿leer? ¿este? aquí vamos de nuevo. "

¿Imprimir?" ¿eso? ¿mi? ¿llave? ¿Entonces qué? <Volver>? ¿A dónde ir? ¿extracto? artículo. "

¿Imprimir? "¿Dar? ¿respuesta? ¿Nombre del archivo? ¿cuando? ¿pista? Entonces qué. ¿noticias? & ltReturn & gt."

Imprimir

¿Imprimir? "¿Está bien? ¡suerte! "

En caso contrario:

¿Imprimir? "¿No? ¿Como esto? Orden. "

Si?__name__?==?" __main__ "

main()

#?vim:?tabstop=4?expandtab?shiftwidth=4