Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/07/2005, 17h37   #1
Membre habitué

 
Avatar de Nounoursonne
 
Inscription : mai 2002
Messages : 257
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 257
Points : 145
Points : 145
Par défaut pbm envoi mail en pl/sql

bonjour,

j'ai un petit problème pour envoyer des mails avec un fichier pdf en pièces jointes. Quand je recois le mail et que j'essaie d'ouvrir le pdf, il me dit que le fichier est corrompu, alors que si j'ouvre directement le pdf généré sur mon disque (le meme qui est envoyé via ma procédure d'envoi de mail), il n'y a pas de soucis.
Je ne comprends pas pourquoi cela ne marche pas
Voici ma procédure
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
 
procedure mail_files ( from_name varchar2,
                                         to_name varchar2,
                                         subject varchar2,
                                         message varchar2,
                                         max_size number DEFAULT 9999999999,
                                         filename1 varchar2 DEFAULT NULL,
                                         filename2 varchar2 DEFAULT NULL,
                                         filename3 varchar2 DEFAULT NULL,
                                         debug number DEFAULT 0 ) IS
 
  v_smtp_server      varchar2(100) := 'serveurmail';
  v_smtp_server_port number  := 25;
 
  v_directory_name   varchar2(100);
  v_file_name        varchar2(100);
 
  v_line             varchar2(1000);
 
  crlf               varchar2(2):= chr(13) || chr(10);
 
  mesg               varchar2(32767);
 
  conn               UTL_SMTP.CONNECTION;
 
  type varchar2_table IS TABLE of varchar2(2000) INDEX BY binary_integer;
 
  file_array         varchar2_table;
  i                  binary_integer;
  pos_sep            Number;
  Fichiers_joints    Varchar2(1000);
 
  v_file_handle      utl_file.file_type;
  v_slash_pos        number;
 
  mesg_len           number;
 
  mesg_too_long      exception;
  invalid_path       exception;
 
  mesg_length_exceeded BOOLEAN := false;
 
begin
 
   -- first load the three filenames into an array for easier handling later ...
 
   file_array(1) := filename1;
   file_array(2) := filename2;
   file_array(3) := filename3;
 
   -- Open the SMTP connection ...
   -- ------------------------
 
   conn:= utl_smtp.open_connection( v_smtp_server, v_smtp_server_port );
 
   -- Initial handshaking ...
   -- -------------------
 
   utl_smtp.helo( conn, v_smtp_server );
   utl_smtp.mail( conn, from_name );
   utl_smtp.rcpt( conn, to_name );
 
   utl_smtp.open_data ( conn );
 
   -- build the start of the mail message ...
   -- -----------------------------------
 
   mesg:= 'Date: ' || TO_CHAR( SYSDATE, 'dd Mon yy hh24:mi:ss' ) || crlf ||
          'From: ' || from_name || crlf ||
          'Subject: ' || subject || crlf ||
          'To: ' || to_name || crlf ||
          'Mime-Version: 1.0' || crlf ||
          'Content-Type: multipart/mixed; boundary="DMW.Boundary.605592468"' || crlf ||
          'Content-Transfer-Encoding: 7bit' || crlf ||
		  'X-Confirm-Reading-To:'||from_name||crlf||
		  'Disposition-Notification-To:'||from_name||crlf||
          'This is a Mime message, which your current mail reader may not' || crlf ||
          'understand. Parts of the message will appear as text. If the remainder' || crlf ||
          'appears as random characters in the message body, instead of as' || crlf ||
          'attachments, then you''ll have to extract these parts and decode them' || crlf ||
          'manually.' || crlf ||
          '' || crlf ||
          '--DMW.Boundary.605592468' || crlf ||
		  '' || crlf ||
          message|| crlf ;
 
   mesg_len := length(mesg);
 
   IF mesg_len > max_size then
      mesg_length_exceeded := true;
   end IF;
 
   utl_smtp.write_data ( conn, mesg );
 
   -- Append the files ...
   -- ----------------
   i:=1;
   pos_sep:=1;
   Fichiers_joints:=filename1;
   IF filename1 IS NOT NULL then
   	 While pos_sep>0 Loop
	   Pos_sep:=instr(fichiers_joints,';',1);
	   IF pos_sep>0 Then
	   	  File_array(1):=substr(fichiers_joints,1,pos_sep-1);
	   Else
	      File_array(1):=fichiers_joints;
	   End IF;
       -- Exit if message length already exceeded ...
 
       exit when mesg_length_exceeded;
 
       -- If the filename has been supplied ...
 
       IF file_array(i) IS NOT NULL then
 
          begin
 
             -- locate the final '/' or '\' in the pathname ...
 
             v_slash_pos := instr(file_array(i), '/', -1 );
 
             IF v_slash_pos = 0 then
                v_slash_pos := instr(file_array(i), '\', -1 );
             end if;
 
             -- separate the filename from the directory name ...
 
             v_directory_name := substr(file_array(i), 1, v_slash_pos - 1 );
             v_file_name      := substr(file_array(i), v_slash_pos + 1 );
 
             -- open the file ...
 
             v_file_handle := utl_file.fopen(v_directory_name, v_file_name, 'r' );
 
             -- generate the MIME boundary line ...
 
             mesg := crlf || '--DMW.Boundary.605592468' || crlf ||
             'Content-Type: application/pdf; name="' || v_file_name || '"' || crlf ||
             'Content-Disposition: attachment; filename="' || v_file_name || '"' || crlf ||
             'Content-Transfer-Encoding: 7bit' || crlf || crlf ;
 
             mesg_len := mesg_len + length(mesg);
 
             utl_smtp.write_data ( conn, mesg );
 
             -- and append the file contents to the end of the message ...
 
             loop
 
                 utl_file.get_line(v_file_handle, v_line);
 
                 IF mesg_len + length(v_line) > max_size then
 
                    mesg := '*** truncated ***' || crlf;
 
                    utl_smtp.write_data ( conn, mesg );
 
                    mesg_length_exceeded := true;
 
                    raise mesg_too_long;
 
                 end IF;
 
                 mesg := v_line || crlf;
 
                 utl_smtp.write_data ( conn, mesg );
 
                 mesg_len := mesg_len + length(mesg);
 
             end loop;
 
          exception
 
             when utl_file.invalid_path then
                 IF debug > 0 then
                    dbms_output.put_line('Error in opening attachment '||
                                          file_array(i) );
                 end IF;
 
             -- All other exceptions are ignored ....
 
             when others then
                 NULL;
 
          end;
 
          mesg := crlf;
 
          utl_smtp.write_data ( conn, mesg );
 
          -- close the file ...
 
          utl_file.fclose(v_file_handle);
 
        end IF;
		IF pos_sep>0 Then
		   fichiers_joints:=substr(fichiers_joints,pos_sep+1);
		End IF;
   end loop;
   End IF;
   -- append the final boundary line ...
 
   mesg := crlf || '--DMW.Boundary.605592468--' || crlf;
 
   utl_smtp.write_data ( conn, mesg );
 
   -- and close the SMTP connection  ...
 
   utl_smtp.close_data( conn );
 
   utl_smtp.quit( conn );
 
 
end;
Quelqu'un peut'il m'aider

Merci
Nounoursonne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/07/2005, 21h57   #2
Membre éclairé
 
Inscription : janvier 2005
Messages : 336
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : janvier 2005
Messages : 336
Points : 353
Points : 353
Bonjour

un diff entre les 2 fichiers donnent quoi ?

KrysKool
kryskool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2005, 09h04   #3
Membre habitué

 
Avatar de Nounoursonne
 
Inscription : mai 2002
Messages : 257
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 257
Points : 145
Points : 145
a priori sur le PDF, les images ont disparues
Nounoursonne est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h48.


 
 
 
 
Partenaires

Hébergement Web